sql - DB2 SQL 连接和最大值

标签 sql join db2 max

我正在访问的数据库有两个需要使用 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/

相关文章:

python - Django 的 Db2 驱动程序?

php - 查询只显示一个结果

SQL 注入(inject)验证文本框

php - SQL 连接未正确显示

javascript - 连接同一个表中的多个 id

sql-server - DB2 对比 PostgreSQL 对比 SQL Server

mysql - 不同货币的 SQL 求和

sql - 选择一个小于今天的日期

sql - LINQ 中的 JOIN 和 LEFT JOIN 等效项

db2 - 将 db2 日期戳转换为 Unix 时间戳