[英]Looking for a solution to a SQL GROUP BY … WHERE MIN date
編輯:以下問題針對MS-SQL和MySQL。
我已經考慮了7個多小時了。 我已經看到許多類似的堆棧溢出答案,但是我都沒有正確理解或解決如何實現的答案。
我想從表中選擇ID,標題等,其中日期是AFTER NOW()之后的下一個可用日期。 要注意的是,它需要按一個特定的列進行分組。
表格如下:
==================================
id | name | date_start | sequence_id -------------------------------------------------------- 1 | Foo1 | 20150520 | 70 2 | Foo2 | 20150521 | 70 3 | Foo3 | 20150522 | 70 4 | Foo4 | 20150523 | 70 5 | FooX | 20150524 | 70 6 | FooY | 20150525 | 70 7 | Bar | 20150821 | 61 8 | BarN | 20151110 | 43 9 | BarZ | 20151104 | 43
這是我想看到的:
==================================
id | name | date_start | sequence_id -------------------------------------------------------- 1 | Foo1 | 20150520 | 70 7 | Bar | 20150821 | 61 9 | BarZ | 20151104 | 43
結果通過MIN(date_start)> NOW()和GROUPED BY sequence_id進行過濾。
我不完全確定可以使用GROUP BY實現此功能,因為其余列將需要包含在我認為不起作用的聚合函數中。
有人對此困境有答案嗎?
非常感謝!
西蒙
只需在子查詢中使用join
和聚合:
select t.*
from table t join
(select sequence_id, min(date_start) as minds
from table t
group by sequence_id
) tt
on tt.sequence_id = t.sequence_id and t.date_start = tt.minds;
這是標准的SQL,因此它應在任何數據庫中運行。
http://sqlfiddle.com/#!9/d8576/4
SELECT *
FROM table1 as t1
LEFT JOIN
(SELECT *
FROM table1
WHERE date_start>NOW()
) as t2
ON t1.sequence_id = t2.sequence_id and t1.date_start>t2.date_start
WHERE t1.date_start>NOW() and t2.date_start IS NULL
GROUP BY t1.sequence_id
SELECT *
FROM table1 as t1
LEFT JOIN
(SELECT *
FROM table1
WHERE date_start>GetDate()
) as t2
ON t1.sequence_id = t2.sequence_id and t1.date_start>t2.date_start
WHERE t1.date_start>GetDate() and t2.date_start IS NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.