【发布时间】:2019-06-17 09:16:10
【问题描述】:
我有一个表,其中包含每个文件的文件名和多个时间戳范围,例如如下:
filename mindatetime maxdatetime
monitor_4.dat 2019-04-28 09:00:00 AM 2019-04-29 11:00:00 AM
monitor_4.dat 2019-04-28 11:00:00 AM 2019-04-29 18:00:00 PM
monitor_4.dat 2019-04-28 09:30:00 AM 2019-04-29 23:00:00 PM
monitor_5.dat 2019-04-28 07:00:00 AM 2019-04-28 10:00:00 AM
monitor_5.dat 2019-04-28 02:00:00 PM 2019-04-28 06:00:00 PM
monitor_5.dat 2019-04-28 09:00:00 AM 2019-04-28 03:00:00 PM
monitor_7.dat 2019-04-21 03:06:26.0 AM 2019-05-21 03:06:10.0 AM
monitor_7.dat 2019-05-21 03:06:10.001 AM 2019-05-24 03:06:11.0 AM
monitor_7.dat 2019-06-05 03:06:18.001 AM 2019-06-06 03:06:11.0 AM
monitor_7.dat 2019-05-24 03:06:11.001 AM 2019-06-05 03:06:18.0 AM
monitor_7.dat 2019-05-12 07:00:10.001 AM 2019-05-13 10:00:10.000 AM
monitor_7.dat 2019-05-15 09:30:10.001 AM 2019-05-18 11:30:10.000 AM
我需要删除多余的时间戳范围,即>属于给定时间戳范围内的那些。 在这种情况下,对于文件“monitor_5.dat”,我们需要将 mindatetime 设置为 7AM,将 maxdatetime 设置为 6PM,因为它们构成了涵盖其他条目的逻辑最小和最大时间戳范围。
所以我的结果输出应该是这样的:
filename mindatetime maxdatetime
monitor_4.dat 2019-04-28 09:00:00 AM 2019-04-29 23:00:00 PM
monitor_5.dat 2019-04-28 07:00:00 AM 2019-04-28 06:00:00 PM
monitor_7.dat 2019-04-21 03:06:26.0 AM 2019-06-05 03:06:18.0 AM
monitor_7.dat 2019-05-12 07:00:10.001 AM 2019-05-13 10:00:10.000 AM
monitor_7.dat 2019-05-15 09:30:10.001 AM 2019-05-18 11:30:10.000 AM
这需要仅通过 SQL 来实现。任何的意见都将会有帮助。我已经探索过 Postgres 中提供的“tsrange”功能,但这并没有完全帮助我。
【问题讨论】:
-
您的样本结果有误。你对待
2019-05-21 03:06:10.001 AM和2019-05-21 03:06:10.0一样。
标签: sql postgresql timestamp sql-timestamp