我有下面提到的表:MySQL 版本 - 5.7.25
表格1:
ID ref
T-1 abc-1-x
T-2 abc-2-x
T-3 abc-3-x
T-4 abc-4-x
T-5 abc-5-x
表2
ref_id value date
abc-1-x 250 2019-12-10 14:16:19
abc-2-x 500 2019-12-11 17:21:05
abc-3-x 100 2019-12-12 18:11:01
abc-4-x 150 2019-12-13 05:04:11
abc-5-x 120 2019-12-14 12:10:09
表3
ID seq date2
T-1 1 2019-12-10 14:05:04
T-1 2 2019-12-10 21:17:01
T-1 3 2019-12-11 13:12:12
T-2 1 2019-12-11 14:13:46
T-2 2 2019-12-12 14:05:04
T-3 1 2019-12-12 14:05:04
T-3 2 2019-12-12 17:15:14
T-3 3 2019-12-13 10:09:08
T-3 4 2019-12-14 12:18:14
T-4 1 2019-12-13 01:01:04
T-4 2 2019-12-13 03:03:01
T-5 1 2019-12-15 14:05:04
通过利用上面提到的三个表,我想比较date
Table2 和 Table3 的每个ID
,并根据每个 id 从 Table3 中获取第一个日期和最后一个日期。
场景:
Less
Same
Greater
所需输出:
ID Value date date1 date2 remarks day_diff
T-1 250 2019-12-10 14:16:19 2019-12-10 14:05:04 2019-12-11 13:12:12 Greater 1
T-2 500 2019-12-11 17:21:05 2019-12-11 14:13:46 2019-12-12 14:05:04 Greater 1
T-3 100 2019-12-12 18:11:01 2019-12-12 14:05:04 2019-12-14 12:18:14 Greater 2
T-4 150 2019-12-13 05:04:11 2019-12-13 01:01:04 2019-12-13 03:03:01 Same 0
T-5 120 2019-12-14 12:10:09 2019-12-15 14:05:04 Null Greater 1
您可以使用子查询为每个条目生成日期MAX
和MIN
日期,然后在外部查询中生成值:Table3
Table2
Greater/Same/Less
SELECT *,
CASE WHEN DATE(date2) > DATE(date) OR DATE(date1) > DATE(date) THEN 'Greater'
WHEN DATE(date2) < DATE(date) OR DATE(date1) < DATE(date) THEN 'Less'
ELSE 'Same'
END AS remarks,
DATEDIFF(date2, date) AS day_diff
FROM (
SELECT t3.ID, t2.Value, t2.date, MIN(t3.date2) AS date1, MAX(t3.date2) AS date2
FROM Table1 t1
JOIN Table2 t2 ON t2.ref_id = t1.ref
JOIN Table3 t3 ON t3.ID = t1.ID
GROUP BY t3.ID, t2.Value, t2.date
) g
输出:
ID Value date date1 date2 remarks day_diff
T-1 250 2019-12-10 14:16:19 2019-12-10 14:05:04 2019-12-11 13:12:12 Greater 1
T-2 500 2019-12-11 17:21:05 2019-12-11 14:13:46 2019-12-12 14:05:04 Greater 1
T-3 100 2019-12-12 18:11:01 2019-12-12 14:05:04 2019-12-14 12:18:14 Greater 2
T-4 150 2019-12-13 05:04:11 2019-12-13 01:01:04 2019-12-13 03:03:01 Same 0
T-5 120 2019-12-14 12:10:09 2019-12-15 14:05:04 2019-12-15 14:05:04 Greater 1
请注意,如果只有一个日期Table2
的价值Table3
,这会给相同的值date1
和date2
。如果你真的想NULL
为date2
在这种情况下,改变SELECT *
在上面查询
SELECT ID, Value, date, date1,
CASE WHEN date1 = date2 THEN NULL ELSE date2 END AS date2,
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句