2015-09-11 23 views
1

我想要做的是在列中查找重複值直到有一個按日期排序的其他值。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」號和名字的最後一個已知值,所以在這種情況下,「巴特」。

我希望我自己清楚,對不清楚的標題感到抱歉!

+0

你試過了什麼? –

+0

我想不出有什麼可嘗試的。我只選擇了姓氏,因爲那是我唯一需要的,現在我需要知道在分離之前發生了多少次。所以我有這樣的代碼:「SELECT name,time FROM name ORDER BY datum DESC LIMIT 1;」 – Joost

+0

那麼時間在哪裏? – Strawberry

回答

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); 
+0

我需要2桌嗎?或者我正在讀這個完全錯誤的...我沒有如此先進的SQL,所以請原諒誤解:) @GordonLinoff – Joost

+0

@Joost。 。 。這隻使用一個表格,引用兩次。 –

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