您好,登錄后才能下訂單哦!
我先把功能場景簡要闡述下:
數據行字段如下:
name
started_at
type
在這張表里,name有重復值
現在需要在type確定的情況下,篩選出一個列表,滿足,name不重復,找出的記錄為同name下started_at為最小的記錄
舉個例子:
活動1 2019-06-01 type1
活動1 2019-06-02 type1
活動1 2019-06-03 type1活動2 2019-06-03 type1
活動2 2019-06-05 type1
活動2 2019-06-07 type1
那篩的列表應為:
活動1 2019-06-01 type1
活動2 2019-06-03 type1
還需要滿足started_at 大于 當前時間
請問這樣的sql應該如何寫?
解決思路為:
就是利用left join 自己
比如s1 left join s2 on s1.name=s2.name and s2.started_at<s1.started_at and s2.started_at > now()
最后where s2.id is null
SELECT s1.NAME, s1.started_at, FROM tbl s1 LEFT JOIN tbl s2 ON s1.`name` = s2.`name` AND s1.started_at > s2.started_at AND s2.started_at > now( ) WHERE s2.id IS NULL AND s1.started_at > now( ) AND s1.type = 'online_lecture' ORDER BY s1.NAME, s1.started_at;
大家有什么更好的解決思路嗎?
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。