簡體   English   中英

從每個帳戶的JOIN中選擇1個行的MIN DATETIME值

[英]Select 1 Row With MIN DATETIME value from JOIN per account

我需要在lastdialed列中選擇日期時間值最舊的行

未撥打的條目的默認DATETIME是0001-01-01 00:00:00

當前,如果帳戶中有尚未撥入的條目和已撥入的條目,則它將選擇最早撥入的條目。

我已經在單個帳戶上運行了一個SELECT MIN(p.lastdialed)以驗證0001-01-01 00:00:00是最小值

應該抓住綠色的條目,當前抓住的是黃色

我嘗試使用HAVING子句和子查詢無濟於事

    SELECT 
    d.id,
    p.lastdialed

FROM dbase d
    JOIN phonenumbers p
    ON d.id = p.maindatabaseid

WHERE d.statusname IN ('X'
AND phonestatus NOT IN ('Y')
AND p.lastdialed = (SELECT MIN(p.lastdialed) FROM phonenumbers s WHERE s.maindatabaseid = d.id)


GROUP BY d.id
ORDER BY RAND();

預期的結果是,每個ID都擁有一個具有MIN lastdialed DATETIME值的條目

我認為這可以滿足您的需求:

WHERE d.statusname IN ('X') AND
     phonestatus NOT IN ('Y') AND
     p.lastdialed = (SELECT COALESCE(MIN(s.lastdialed), '0001-01-01 00:00:00')
                     FROM phonenumbers s 
                     WHERE s.maindatabaseid = d.id AND
                           s.lastdialed <> '0001-01-01 00:00:00'
                   );

子查詢為外部查詢中的每個組計算lastdialed的最小值。

計算將查看沒有默認值的匹配電話號碼記錄,並取其中的最小值。 如果不存在,則COALESCE()將默認值放回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM