SQL:如何找到重复值直到分离

时间:2015-09-11 11:34:56

标签: php mysql sql database select

我想用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”。

我希望自己清楚明白,对不明确的标题感到抱歉!

2 个答案:

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

此查询尝试识别记录孤岛,即具有相同Namegrp计算字段的连续行就是这样。

如果您希望Name具有最多连续记录,请在上述查询中使用TOP 1

Demo here