我想用SQL做的是在列中找到重复值,直到按日期排序另一个值。
这是我的桌子。我使用"CURRENT_TIMESTAMP"
作为日期列。
Name |date
-------------------
Bart |12-12-2014
Bart |23-12-2014
Joost |24-12-2014
Bart |25-12-2014
Bart |26-12-2014
Bart |27-12-2014
所以在这个例子中我想要返回的数字“3”和最后一个已知的name值,所以在本例中是“Bart”。
我希望自己清楚明白,对不明确的标题感到抱歉!
答案 0 :(得分:4)
where
子句中的方法:
select count(*), max(lastname.name)
from tablename t cross join
(select t2.name from tablename t2 order by date desc limit 1) as lastname
where t.name = lastname.name and
t.date > (select max(t2.date) from tablename t2 where t2.name <> lastname.name);
答案 1 :(得分:2)
您可以使用以下查询:
SELECT Name, COUNT(*) AS cnt
FROM (
SELECT Name, [date],
ROW_NUMBER() OVER (ORDER BY [date]) -
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY [date]) AS grp
FROM mytable ) AS t
GROUP BY Name, grp
ORDER BY COUNT(*) DESC
此查询尝试识别记录孤岛,即具有相同Name
:grp
计算字段的连续行就是这样。
如果您希望Name
具有最多连续记录,请在上述查询中使用TOP 1
。