如何比较日期时间并获取第一个和最后一个日期 MySQL

矢量 JX

我有下面提到的表: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

通过利用上面提到的三个表,我想比较dateTable2 和 Table3 的每个ID,并根据每个 id 从 Table3 中获取第一个日期和最后一个日期。

场景:

  • 如果表 3 的任何日期小于表 2 中的特定 id 将其显示为 Less
  • 如果表 3 的任何日期等于表 2 中的特定 id 将其显示为 Same
  • 如果表 3 的任何日期大于表 2 中的特定 id 将其显示为 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
缺口

您可以使用子查询为每个条目生成日期MAXMIN日期,然后在外部查询中生成值:Table3Table2Greater/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,这会给相同的值date1date2如果你真的想NULLdate2在这种情况下,改变SELECT *在上面查询

SELECT ID, Value, date, date1,
       CASE WHEN date1 = date2 THEN NULL ELSE date2 END AS date2,

dbfiddle 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C#中使用EF从MySQL表中获取第一个和最后一个日期?

Mysql从列中获取第一个日期和最后一个日期并作为结果创建2个单独的列

Mysql] 查找用户以不同角色加入的事件的第一个和最后一个日期

MySql 从查询中获取第一个和最后一个结果

Mysql 获取小于给定日期的第一个日期

第一个工作日期的MySQL查询

在laravel 5和mysql中获取groupby对象的第一个和最后一个值

Mysql查询获取内部连接查询中第一个和最后一个事务之间的天数

如何在 mysql 5.7 上显示从一个月的第一个日期到 MYSQL 5.7 的月底日期的日期?

对于各列MySQL的最后一个非NULL值和行日期时间

如何在mySQL表中找到按日期时间排序的最后一个值?

MYSQL按日期分组并计算第一个日期

Mysql - sql 如何从包含第一个表 ID 的第二个表中获取最小时间和最大时间记录

php / MYSQl输出数组的每个值的查询的第一个和最后一个结果?

显示组中的第一个和最后一个mysql记录以及其他属性

从mysql中的多行中选择最后一个日期

仅获取第一个条目php mysql

如何使用pymongo获取第一个和最后一个日期值

如何获取文件中的第一个和最后一个日期

如何获取当年的第一个和最后一个日期javascript

我如何获得按MySQL查询分组的最后结果(不是第一个)

从第一个日期和最后一个日期获取值sql

如何创建一个存储过程,在 MYSQL 中的开始日期和结束日期之间获取销售的开始日期和结束日期

Mysql 按第一个表日期分组并计算第二个表中的不同字段

如何在第一个和最后一个日期之间填充日期?

从当前日期获取记录到下个月(直到下个月的最后一个日期)mysql

如何仅获取第一个结果mysql php-foreach中的多个查询

如何在mysql查询中的第一个空格后获取所有单词

MySQL在每个组中选择第一个,第二个和最后一个值的最佳方法