簡體   English   中英

SQL : 對於每個 ID,只顯示另一列的最高值(不能分組)

[英]SQL : For each ID, only display the highest value from another column (can't group by)

我這里有這張桌子:

+---------+----------+------------+------------+
| idStep  |  idProj  | dateStart  | dateEnd    |
+---------+----------+------------+------------+
|       1 |        1 | 2011-07-01 | 2011-09-01 |
|       1 |        2 | 2012-05-01 | 2012-05-10 |
|       1 |        3 | 2011-11-01 | 2012-01-20 |
|       2 |        1 | 2011-09-02 | 2011-11-30 |
|       2 |        2 | 2012-05-11 | 2012-06-01 |
|       2 |        3 | 2012-01-21 | 2012-04-01 |
|       3 |        1 | 2011-12-01 | 2012-07-07 |
|       3 |        2 | 2012-06-02 | 2012-07-01 |
|       3 |        3 | 2012-04-02 | NULL       |
|       4 |        1 | 2012-07-08 | NULL       |
|       4 |        2 | 2012-07-01 | 2012-07-21 |
|       5 |        2 | 2012-07-22 | 2012-07-23 |
+---------+----------+------------+------------+

我需要通過搜索每個 idProject 的最高 idStep 而不使用 Group By 來找到每個項目的當前步驟,這就是我完全卡住的地方。 如果沒有 GROUP BY,我就無法到達那里。

基本上,輸出應該是這樣的:

+---------+----------+------------+------------+
| idStep  |  idProj  | dateStart  | dateEnd    |
+---------+----------+------------+------------+
|       3 |        3 | 2012-04-02 | NULL       |
|       4 |        1 | 2012-07-08 | NULL       |
|       5 |        2 | 2012-07-22 | 2012-07-23 |
+---------+----------+------------+------------+

我想使用這樣構建的查詢

SELECT idProj,idStep
FROM table
WHERE idStep = (SELECT max(idStep) FOR EACH idProj)

我知道 FOR EACH 不是 SQL,我只是想讓我想要的查詢結構可讀。

你想要一個相關的 subuqery:

SELECT idProj, idStep
FROM table t
WHERE t.idStep = (SELECT max(idStep)
                  FROM table t2
                  WHERE t2.idProj = t.idProj
                 );

暫無
暫無

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

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