各スケジュールには多くのランプがあり、各ランプにはend_date
.
ランプの ID とそのスケジュールの最新の終了日を含む追加フィールドとともに、すべてのランプを一覧表示する必要があります。WHERE
また、節でこの追加フィールドを使用できるようにする必要があります。
これは通常、MAX
関数を使用するサブクエリのケースですが、1 つの問題を除いて、ランプのend_date
フィールドが null になる可能性があり、ランプが現在のものであることを示します。したがって、値は null 以外の値よりも「小さい」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 句では使用できません (不明な列です)。
あなたはなにか考えはありますか?