簡體   English   中英

左連接與 postgreSQL 中的日期和時間戳列

[英]Left Join with date and timestamp columns in postgreSQL

我有兩張桌子

table1 (id, dept_id, position_id, pin, name, last_name, create_time)

table2 (dept_id, pin, name, last_name, zone_id, create_time)

並且他們都有create_time列,它以這種格式存儲日期和時間(2019-12-01 18:00:00.568)這個列非常重要我需要匹配日期和時間以使 Left join Table1 to Table2 我可以進行匹配有日期但有時間我有問題,兩列中的時間總是以秒或毫秒為單位,所以我嘗試使用 to_char() 轉換為文本我需要每天和每小時加入兩個表(24 小時)做報告


這是我的查詢

SELECT p.dept_id, p.pin, p.name, p.last_name, p.position_id, a.zone_id, p.create_time::date, to_char(p.create_time::timestamp::time, 'HH24:MI') as time1, to_char(a.create_time::timestamp::time, 'HH24:MI') as time2
    FROM table1 p
    LEFT JOIN table2 a
    ON p.create_id::date=a.create_time::date AND
    time1 = time2 AND 
    p.pin=a.pin AND 
    p.dept_id=a.dept_id 

它給了我日期匹配但不提供時間匹配。 我需要這樣的東西

SELECT p.dept_id, p.pin, p.name, p.last_name, p.position_id, a.zone_id, p.create_time::date, to_char(p.create_time::timestamp::time, 'HH24:MI') as time1, to_char(a.create_time::timestamp::time, 'HH24:MI') as time2 FROM table1 p LEFT JOIN table2 a ON p.create_id::date=a.create_time::date AND time1 = time2 AND p.pin=a.pin AND p.dept_id=a.dept_id

您可以使用date_trunc將時間戳截斷為小時並join

SELECT p.dept_id, p.pin, p.name, p.last_name, p.position_id, a.zone_id,
       p.create_time::date, to_char(p.create_time::timestamp::time, 'HH24:MI') as time
FROM table1 p
LEFT JOIN table2 a ON date_trunc('hour', p.create_time) = date_trunc('hour', a.create_time)
                  AND p.pin=a.pin
                  AND p.dept_id=a.dept_id 

您可以使用日期/時間不等式。 例如:

SELECT p.dept_id, p.pin, p.name, p.last_name, p.position_id, a.zone_id, 
       p.create_time::date, to_char(p.create_time::timestamp::time, 'HH24:MI') as time
FROM table1 p LEFT JOIN
     table2 a
     ON p.pin = a.pin AND
        p.dept_id = a.dept_id AND
        p.create_id >= a.create_time - INTERVAL '5 second' AND
        p.create_id <= a.create_time + INTERVAL '5 second';

這個邏輯適用於他們在任何一方都在 5 秒內。

暫無
暫無

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

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