我有如下记录:
ID Date Title User
1 2019-04-29 14:15:55.567 A 1222
2 2019-04-29 14:25:13.530 A 1222
3 2019-04-29 15:17:07.210 A 1222
4 2019-04-29 16:05:49.067 B 1048
5 2019-04-29 16:36:37.330 C 681
6 2019-04-29 16:37:16.250 C 681
7 2019-04-29 16:37:49.160 D 681
8 2019-04-29 16:38:48.803 C 681
我要检查每个记录是否与先前的记录相同,如果两者的标题相同,请忽略先前的记录。
我希望看到这样的结果:
ID Date Title User
3 2019-04-29 15:17:07.210 A 1222
4 2019-04-29 16:05:49.067 B 1048
6 2019-04-29 16:37:16.250 C 681
7 2019-04-29 16:37:49.160 D 681
8 2019-04-29 16:38:48.803 C 681
答案 0 :(得分:2)
您可以为此使用LAG
函数
SELECT *
FROM (
SELECT *
, LAG(title) OVER (ORDER BY Date) AS prev_title
FROM t
) AS x
WHERE title <> prev_title
答案 1 :(得分:1)
使用lag()
select * from
(
select *, lag(title) over(order by date desc) as prevtitle
from tablename
)A where prevtitle is null or title<>prevtitle
输出:
id dateval title userid
3 29/04/2019 15:17:07 A 1222
4 29/04/2019 16:05:49 B 1048
6 29/04/2019 16:37:16 C 681
7 29/04/2019 16:37:49 D 681
8 29/04/2019 16:38:48 C 681
答案 2 :(得分:1)
使用lead()
:
select t.*
from (select t.*,
lead(title) over (order by id) as next_title
from t
) t
where next_title is null or next_title <> title;
您要使用lead()
,因为您希望每个组中的 most 个最近值。如果您想要最早的值,可以使用lag()
。
我不确定是否应该通过id
或date
列进行排序。对于您的样本数据,它们是等效的。