我需要通知用户发生警报的日期。
我的数据库中有一个alerts_table,它存储unix时间和在那段时间发生的警报。
select DISTINCT unixtime from alerttable; // returns all alerts
问题是我每天都会发生数千个警报,我只希望我的查询返回一个代表每一天的 UNIX 时间 ,这样我就可以告诉用户他在特定日期是否有警报。
然后我可以将unix时间转换为天并向用户显示 (例如:您在 2023 年 11 月 11 日、2023 年 12 月 11 日等收到了警报)
谢谢!!
我不确定这是否是最好的方法,但它有效:
SELECT
MIN(unixTime),
TRUNC(TO_DATE( '1970-01-01', 'YYYY-MM-DD' ) + NUMTODSINTERVAL(unixTime, 'SECOND' ))
FROM yourtable
GROUP BY
TRUNC(TO_DATE( '1970-01-01', 'YYYY-MM-DD' ) + NUMTODSINTERVAL(unixTime, 'SECOND' ))
ORDER BY 1;
因此我们使用函数
NUMTODSINTERVAL
(请参阅文档)来从unixtime获取秒数。
由于 Unix 时间的定义是从
1970-01-01
“开始”的,我们可以将秒添加到该日期,并从 unixtime 值中获取日期。
现在我们使用
TRUNC
去掉确切的时间,只关注日期。因此,您可以 GROUP BY
仅选择日期,并每天选择一个 unix 时间(如果您愿意,也可以选择当天本身)。
我们必须决定选择哪个 Unix 时间。我使用
MIN
选择了每天的第一个。
我们可以在这个样本小提琴
上尝试这个解决方案