2016-08-28 57 views
0

下面的代碼是從SO上的另一個問題獲得的。 Original Q&A連續幾天(連勝)和當天的記錄數

我想計算的連續天(連勝)以來今天記錄,也多少記錄今日的次數。我正在使用它來發送通知。如果用戶在同一天提交新的記錄,他們不應該得到第二個通知,告訴他們他們正在連續(他們被告知第一次提交當天的記錄)。

我試過@streak之前加入COUNT()功能,第一SELECT後幾乎無處不在,似乎合理,但此查詢是太複雜,我看着辦吧。

SELECT streak + 1 as realStreak 
FROM (
SELECT dt, 
@streak := @streak+1 streak, 
datediff(curdate(),dt) diff 
FROM (
SELECT distinct date(dt) dt 
FROM glucose where uid = 1 
) t1 
CROSS JOIN (SELECT @streak := -1) t2 
ORDER BY dt desc 
) 
t1 where streak = diff 
ORDER BY streak DESC LIMIT 1 

http://sqlfiddle.com/#!9/45d386/1/0

的上述結果應該是:

realStreak | RecordsToday 
3   | 3 
+0

可能與此相同的鏈接,可能是它對你有幫助http://stackoverflow.com/questions/25272098/mysql-count-consecutive-dates-for-current-streak –

+0

感謝@Hulk,這是我得到的SQL代碼片段...我參考了我的問題。 – Ando

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Mihai

回答

0

只需添加一個子查詢的今天檢查

SELECT streak + 1 as realStreak,cdt 
FROM (
SELECT dt, 
@streak := @streak+1 streak, 
datediff(curdate(),dt) diff 
FROM (
SELECT distinct date(dt) dt 
FROM gl where uid = 1 
) t1 
CROSS JOIN (SELECT @streak := -1) t2 
ORDER BY dt desc 
)t1 
JOIN 
(SELECT COUNT(CASE WHEN DATE(dt)=CURDATE() THEN 1 END) cdt FROM gl)x 
where streak = diff 
ORDER BY streak DESC LIMIT 1 
+1

謝謝! 「只要加上......」我希望對我來說也很簡單。 – Ando