每個計劃都有許多坡道,每個坡道都有一個end_date
。在子查詢中按大小寫使用訂單
我需要列出所有我的坡道,以及包含坡道編號和該計劃的最新結束日期的額外字段。我還需要能夠在我的WHERE
條款中使用此額外字段。
對於使用MAX
函數的子查詢,這通常是一種情況,除了一個問題:斜坡的end_date
字段可以爲空,表示斜坡是當前的。因此,SELECT MAX(end_date)
不起作用,因爲null
值比非空值「小」。
到目前爲止,這是我想出來的:
SELECT r1.*,
(SELECT r2.id
FROM ramp as r2
WHERE schedule_id = r.schedule_id
ORDER BY IF(end_dte is NULL, '9999-99-99', end_dte) DESC
LIMIT 1) as latestId
FROM ramp as r1
這會產生這個表,這正是我想要的:
+-------+-------------+------------+-----------------+--------+------------+------------+----------+
| id | schedule_id | suppr_flag | comment | months | start_dte | end_dte | latestId |
+-------+-------------+------------+-----------------+--------+------------+------------+----------+
| 16 | 7 | NULL | NULL | NULL | 2008-06-23 | NULL | 16 |
| 15 | 6 | NULL | NULL | NULL | 2007-05-01 | 2007-12-31 | 15 |
| 13 | 5 | NULL | 1-15 deals | NULL | 2004-08-11 | NULL | 13 |
| 11 | 4 | NULL | NULL | NULL | 2005-08-11 | NULL | 11 |
| 12 | 4 | NULL | NULL | 12 | 2004-08-11 | 2005-08-10 | 11 |
| 17 | 13 | NULL | NULL | 6 | 2009-03-05 | 2009-09-04 | 19 |
| 18 | 13 | NULL | NULL | 6 | 2009-09-05 | 2010-03-04 | 19 |
| 19 | 13 | NULL | NULL | NULL | 2010-03-05 | NULL | 19 |
| 20 | 14 | NULL | NULL | 12 | 2001-06-18 | 2008-06-17 | 20 |
除了我不能在使用latestId
WHERE子句(這是一個未知列)。
你有什麼想法嗎?
真的太棒了。我不知道你可以做嵌套的內部連接 - 我嘗試嵌套的子查詢,但它崩潰或不可能。 –
由於某種原因,我得到兩個不同的latestId值。我正在做其他一些連接。任何想法離開你的頭頂? –
@SamSelikoff我認爲對於同一個'schedule_id',可能有不止一行具有相同的最大'end_dte' ...如果這是問題,您是否想要最大ID? – fthiella