在表格中选择特定记录

时间:2019-04-29 15:17:55

标签: sql-server

我在SQL Server中有两个表。第一个包含一个客户端列表,第二个包含每个客户端的活动列表。如何设置查询以仅为每个客户端选择最后一个活动?

例如:

  • 客户1具有Act1,Act2,Act3,Act4
  • Client2具有Act1,Act2

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

2 个答案:

答案 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