我在SQL Server中有两个表。第一个包含一个客户端列表,第二个包含每个客户端的活动列表。如何设置查询以仅为每个客户端选择最后一个活动?
例如:
我想看到Client1 ---> Act4和Client2 ---> Act2。
有办法做到吗?
编辑: 我将两个表合并到一个游标中,现在我有这种情况(也有其他字段,但它们并不重要):
ID DATE
00001 25/04/2019 09.20
00001 30/04/2019 10.00
00002 23/04/2019 09.00
00002 29/04/2019 11.00
00003 NULL
我现在需要获得以下结果:
ID DATE
00001 30/04/2019 10.00
00002 29/04/2019 11.00
00003 NULL
我尝试过:
SELECT temp.* ;
FROM temp
WHERE TTOC(temp.date,1) IN (SELECT TTOC(MAX(t.date),1) FROM temp FULL OUTER JOIN t ON temp.ID == t.ID GROUP BY temp.ID)
其中t是合并之前的两个原始表之一。它可以工作,但不会显示在DATE字段中没有任何信息的用户。有什么建议吗?
答案 0 :(得分:0)
select Client
,reverse(left(reverse(Act), charindex(',', reverse(Act)) -1)) as LastAct
from table
工作原理:
反转整个字符串,然后找到第一个逗号(该逗号过去是最后一个逗号),然后修剪左端的字符串,将其反转回来。
答案 1 :(得分:0)
对于您的temp
表,您只需要group by id
:
SELECT id, max(date) lastact
FROM temp
GROUP BY id
如果您也想查看其他列:
SELECT t.*
FROM temp t LEFT JOIN (
SELECT id, max(date) lastact
FROM temp
GROUP BY id
) g on g.id = t.id and g.lastact = t.date