簡體   English   中英

如何選擇左表,按右表的最大日期排序,並且最大日期小於或等於NOW()?

[英]How to select left table, order by max date of the right table and max date is less than or equal to NOW()?

以下是我的數據庫表

left_table
id    name
1     A
2     B
3     C
4     D
5     E

right_table
id    left_table_id     size      date_time
1     1                 xs        2017-06-13 14:20:00
2     3                 s         2017-06-13 14:25:00
3     2                 xs        2017-06-13 14:27:00
4     1                 s         2017-06-13 14:30:00
5     2                 m         2017-06-13 14:32:00
6     2                 xs        2017-06-13 14:33:00
7     3                 xl        2017-06-13 14:40:00
8     4                 s         2017-06-13 14:41:00
9     4                 m         2017-06-13 14:45:00
10    5                 m         2017-06-13 14:46:00

如何編寫sql查詢以通過max(date_time) DESC獲取left_table順序的記錄,其中date_time <= NOW()作為以下結果。

result left_table order by max(add_time) DESC 
id    name    max(add_time)   
2     B       2017-06-13 14:33:00
1     A       2017-06-13 14:30:00
3     C       2017-06-13 14:25:00

這是因為4和5的left_table_id的date_time是> NOW()。 假設NOW() = 2017-06-13 14::35:00 請注意,left_table_id 3具有一個add_time > NOW()但由於它具有其他右記錄add_time <= NOW() ,因此仍處於選擇狀態。

您可以使用如下查詢:

SELECT t.id, t.name, r.date_time
FROM left_table AS t
JOIN (
   SELECT id, MAX(date_time) AS date_time
   FROM right_table
   WHERE date_time <= NOW() 
   GROUP BY id) AS r ON t.id = r.id
ORDER BY r.date_time DESC;

該查詢使用派生表,該表過濾掉date_time值超過當前時間戳記的記錄。 它還對記錄進行分組,以獲取每個id的最新date_time值。 使用此派生表,我們可以使用其date_time字段輕松執行所需的排序。

暫無
暫無

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

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