我正在访问的数据库有两个需要使用 DB2 SQL 查询的表,此处显示为名称表和地址表。该查询用于查找所有有一定余额的人。地址存储在单独的表中以跟踪地址更改。在地址表中,最新的地址由序列号(ADDRSEQUENCE)确定。 AddressID 字段出现在两个表中,它将每个人与特定地址联系起来。最高的序列号是当前地址。我需要每个人的当前地址,而且只需要那个人的当前地址。我知道我将不得不在某个地方使用 MAX 作为序列号,但我不知道如何在给定连接的情况下定位它。这是我当前的查询,当然会返回所有地址...
SELECT NAMETABLE.ACCTNUM AS ACCOUNTNUMBER,
NAMETABLE.NMELASTBUS AS LASTNAME,
NAMETABLE.NAME_FIRST AS FIRSTNAME,
NAMETABLE.BALDUE AS BALANCEDUE,
ADDRESSTABLE.STREETNAME AS ADDR,
ADDRESSTABLE.ADDRLINE2 AS
ADDRLINE2,ADDRESSTABLE.CITYPARISH AS CITY,
ADDRESSTABLE.ADDRSTATE AS STATE,
ADDRESSTABLE.ZIPCODE AS ZIP,
ADDRESSTABLE.ADDIDSEQNO AS ADDRSEQUENCE
FROM NAMETABLE JOIN ADDRESSTABLE ON NAMETABLE.ADDRESSID = ADDRESSTABLE.ADDRESSID
WHERE NAMETABLE.BALANCEDUE >= '50.00'
最佳答案
您可以对 MAX(ADDRSEQUENCE)
进行子选择,如下所示:
SELECT
N.ACCTNUM AS ACCOUNTNUMBER
,N.NMELASTBUS AS LASTNAME
,N.NAME_FIRST AS FIRSTNAME
,N.BALDUE AS BALANCEDUE
,A.STREETNAME AS ADDR,
,A.ADDRLINE2 AS
,A.ADDRLINE2
,A.CITYPARISH AS CITY,
,A.ADDRSTATE AS STATE,
,A.ZIPCODE AS ZIP,
FROM NAMETABLE AS N
JOIN ADDRESSTABLE AS A
ON N.ADDRESSID = A.ADDRESSID
WHERE N.BALANCEDUE >= '50.00'
AND A.ADDRSEQUENCE = (
SELECT MAX(ADDRSEQUENCE)
FROM ADDRESSTABLE AS A2
WHERE A.ADDRESSID = A2.ADDRESSID
)
这在 DB2 中相当快。
关于sql - DB2 SQL 连接和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525061/