關於mysql自聯去重的一些記錄

我先把功能場景簡要闡述下:
數據行字段以下:
name
started_at
type
在這張表裏,name有重複值sql

如今須要在type肯定的狀況下,篩選出一個列表,知足,name不重複,找出的記錄爲同name下started_at爲最小的記錄
舉個例子:
活動1 2019-06-01 type1
活動1 2019-06-02 type1
活動1 2019-06-03 type1code

活動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 大於 當前時間co

請問這樣的sql應該如何寫?join

解決思路爲:tar

就是利用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;

你們有什麼更好的解決思路嗎?
相關文章
相關標籤/搜索