簡體   English   中英

如何在 Oracle SQL Developer 中轉換 unix 時間戳和聚合最小和最大日期?

[英]How to convert unix timestamp and aggregate min and max date in Oracle SQL Developer?

我在 Oracle SQL 中有如下表:

ID   | date          | place
-----------------------------
123  | 1610295784376 | OBJ_1
444  | 1748596758291 | OBJ_1
567  | 8391749204754 | OBJ_2
888  | 1747264526789 | OBJ_3
  • ID - 客戶端ID
  • date - Unix 中的日期 UTC 時間戳
  • 地點 - 與客戶聯系的地點

我需要匯總以上日期才能獲得如下結果,所以我需要:

  1. 將 UTC 中的 unix 時間戳從“日期”列轉換為正常日期,如下所示

  2. 計算“地點”列中每個值的最小和最大日期

    最小日期 最大日期 獨特的地方
    2022-01-05 2022-02-15 OBJ_1
    2022-02-10 2022-03-20 OBJ_2
    2021-10-15 2021-11-21 OBJ_3

您可以使用:

SELECT TIMESTAMP '1970-01-01 00:00:00 UTC'
         + MIN(date_column) * INTERVAL '0.001' SECOND(3)
         AS min_date,
       TIMESTAMP '1970-01-01 00:00:00 UTC'
         + MAX(date_column) * INTERVAL '0.001' SECOND(3)
         AS max_date,
       place
FROM   table_name
GROUP BY place;

注意: SECOND之后的(3)是可選的,將明確指定小數秒的精度。

或者:

SELECT TIMESTAMP '1970-01-01 00:00:00 UTC'
         + NUMTODSINTERVAL( MIN(date_column) / 1000, 'SECOND')
         AS min_date,
       TIMESTAMP '1970-01-01 00:00:00 UTC'
         + NUMTODSINTERVAL( MAX(date_column) / 1000, 'SECOND')
         AS max_date,
       place
FROM   table_name
GROUP BY place;

其中,對於示例數據:

CREATE TABLE table_name (ID, date_column, place) AS
SELECT 123, 1610295784376, 'OBJ_1' FROM DUAL UNION ALL
SELECT 444, 1748596758291, 'OBJ_1' FROM DUAL UNION ALL
SELECT 567, 1391749204754, 'OBJ_2' FROM DUAL UNION ALL -- Fixed leading digit
SELECT 888, 1747264526789, 'OBJ_3' FROM DUAL;

兩者都是 output:

MIN_DATE 最大日期 地方
2021-01-10 16:23:04.376000000 協調世界時 2025-05-30 09:19:18.291000000 協調世界時 OBJ_1
2014-02-07 05:00:04.754000000 UTC 2014-02-07 05:00:04.754000000 UTC OBJ_2
2025-05-14 23:15:26.789000000 協調世界時 2025-05-14 23:15:26.789000000 協調世界時 OBJ_3

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM