SQL SELECT 在 DB2 中查询
SQL SELECT query in DB2
我需要获取与每个人的最新时间戳匹配的 ssn 和电子邮件,也就是说每个人可以有许多具有不同时间戳的电子邮件,我需要获取最新的。
这是我目前的情况:
SELECT SSN, EMAIL
FROM TABLE1
WHERE TIMESTAMP IN (SELECT TIMESTAMP
FROM TABLE1
WHERE SSN IN ('111111111', '222222222', '333333333')
ORDER BY TIMESTAMP DESC FETCH FIRST ROW ONLY)
这只给了我一个结果,而不是三个。我试图寻找 "FOR" 语句,但它似乎只在存储过程中使用过。据推测,我对内部 select 语句有疑问,如果您能阐明这个问题,我将不胜感激。谢谢大家
使用 window 函数怎么样?
select t1.ssn, t1.email
from (select t1.*,
row_number() over (partition by ssn order by timestamp desc) as seqnum
from table1 t1
where SSN in ('111111111', '222222222', '333333333')
) t
where seqnum = 1;
试试这个。它是一个简单的灵魂,其中根据每个人的最新时间戳获取记录
select ssn, email
from table1 a
where timestamp = (Select max(timestamp) from table1 where ssn = a.ssn)
我需要获取与每个人的最新时间戳匹配的 ssn 和电子邮件,也就是说每个人可以有许多具有不同时间戳的电子邮件,我需要获取最新的。
这是我目前的情况:
SELECT SSN, EMAIL
FROM TABLE1
WHERE TIMESTAMP IN (SELECT TIMESTAMP
FROM TABLE1
WHERE SSN IN ('111111111', '222222222', '333333333')
ORDER BY TIMESTAMP DESC FETCH FIRST ROW ONLY)
这只给了我一个结果,而不是三个。我试图寻找 "FOR" 语句,但它似乎只在存储过程中使用过。据推测,我对内部 select 语句有疑问,如果您能阐明这个问题,我将不胜感激。谢谢大家
使用 window 函数怎么样?
select t1.ssn, t1.email
from (select t1.*,
row_number() over (partition by ssn order by timestamp desc) as seqnum
from table1 t1
where SSN in ('111111111', '222222222', '333333333')
) t
where seqnum = 1;
试试这个。它是一个简单的灵魂,其中根据每个人的最新时间戳获取记录
select ssn, email
from table1 a
where timestamp = (Select max(timestamp) from table1 where ssn = a.ssn)