iT邦幫忙

0

#sql 找出日期相減的最大值

  • 分享至 

  • xImage

大家好我是一個sql小菜雞,請問各位大老假設我在一個資料表裡有:orderid、orderdate、receivedate。請問我該如何寫最後的查詢結果才會顯示兩個日期相減的最大值以及對應的orderid?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
ysuper
iT邦新手 5 級 ‧ 2022-11-02 09:25:52
最佳解答

Zero皇的結果會得到以下錯誤的結果

我只會用子查詢的方式

SELECT *,
       Datediff(receivedate, orderdate) AS diffdate
FROM   order_table
WHERE  Datediff(receivedate, orderdate) = (SELECT Max(Datediff(receivedate, orderdate))
                                           FROM   order_table)

sqlfiddle測試資料庫

wiseguy iT邦超人 1 級 ‧ 2022-11-02 10:16:53 檢舉

其實是不建議這樣 select。沒意外的話,它 always 是 full table scan。
最好是多加一個欄位 datediff,在新增資料時就把 Datediff(receivedate, orderdate) 放進 datediff 欄位,然後把 orderid, datediff 設為 index。

Zero皇 iT邦研究生 3 級 ‧ 2022-11-03 20:37:04 檢舉

謝謝~沒發現寫錯了,已經更新了答案,雖然不用子查詢但也用了排序跟GROUP BY可能沒有這個好。

0
Zero皇
iT邦研究生 3 級 ‧ 2022-11-02 07:51:57

用MAX()函數去取最大值,DATEDIFF()取日期相減值,最後由大到小排序第1筆。

SELECT order_id, MAX(DATEDIFF(receivedate,orderdate)) AS diffDate FROM order_table 
GROUP BY order_id
ORDER BY diffDate DESC Limit 1;

sqlfiddle測試資料庫

(之前錯誤的答案):
SELECT order_id, MAX(DATEDIFF(receivedate,orderdate)) FROM order_table;

我要發表回答

立即登入回答