2017-10-09 98 views
1

最近我碰到以下要求,我不確定這裏最好的解決方案是什麼。PostgreSQL複雜的訂購

我有一個表有驅動程序名稱,比方說A,B;在另一個表中,我爲這些驅動程序提供了一些事件,每個事件都有發佈日期,例如驅動程序AI具有2017-06-06和2017-06-09,而驅動程序BI具有2017-06-07和2017-06 -10(yyyy-mm-dd格式)。

我需要對此進行排序,以便在我需要ASC訂單的情況下,它會比較兩個驅動程序的最早發行日期,以及何時發現驅動程序A的2017-06-06,它會帶來所有對於特定的驅動程序的事件,和隨之而來的司機B中的事件後,才,所以基本上我想有以下順序:

  • A - 2017年6月6日
  • A - 2017年6月9日
  • B - 2017-06-07
  • B - 2017-06-10

我不知道如何在這裏最好的解決方案...也許在另一個SELECT中的SELECT,使用不同的ORDER BYs?

表1:
ID名稱
1所述的
2 B

表2:
ISSUE_DATE | driver_id
2017-06-06 | 1
2017-06-09 | 1
2017-06-07 | 2
2017-06-10 | 2

所需輸出如上所述,即首先比較發行日期;當發現最早的時候,帶上每個其他具有相同driver_id的事件,並且只有在這之後再進入下一個駕駛員的事件。

+0

編輯你的問題,並提供樣本數據(* *表*)和所需的結果。 –

回答

0

您可以使用窗口函數的順序爲第二個表:

select e.* 
from events e 
order by min(e.event_date) over (partition by e.driver), 
     e.driver, e.event_date; 

這不會在第二個表連接,但是這是一個小修改查詢。

+0

謝謝!看看我想要什麼。如果我想要反向順序,那就是讓驅動程序使用最新的issue_date,然後去DESC? 我嘗試使用max(e.event_date),和/或將DESC放在order by,但我沒有得到所需的輸出... – amnine

+0

@amnine。 。 。你可能需要'max()'和'desc'。但是,您在評論中的描述直接與該問題相矛盾。 –

+0

這是我試過的: select e。* from事件e order by max(e.event_date)over(由e.driver分區), e.driver,e.event_date DESC; – amnine