首页 > 解决方案 > 选择表中的特定记录

问题描述

我在 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 字段中没有任何信息的用户。有什么建议么?

标签: sql-server

解决方案


对于您的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

推荐阅读