簡體   English   中英

如何將SQL中的兩個時間戳相減然后計數?

[英]How to subtract two timestamps in SQL and then count?

我想基本上找出有多少用戶在我的payment_timetrigger_time的 15 分鍾、30 分鍾和 60 分鍾內付款 我有以下查詢

with redshift_direct() as conn:
            trigger_time_1 = pd.read_sql(f"""
            with new_data as
            (
            select
            cycle_end_date
            , prime_tagging_by_issuer_and_product
            , u.user_id
            , settled_status
            , delay,
            ots_created_at + interval '5:30 hours' as payment_time
            ,case when to_char(cycle_end_date,'DD') = '15' then 'Odd' else 'Even' end as cycle_order

            from
            settlement_summary_from_snapshot s
            left join (select distinct user_phone_number, user_id from user_events where event_name = 'UserCreatedEvent') u
            on u.user_id = s.user_id
            and cycle_type = 'end_cycle'
            and cycle_end_date > '2021-11-30' and cycle_end_date < '2022-01-15'
            )
            select
            bucket_id
            , cycle_end_date, d.cycle_order
            , date(cycle_end_date) as t_cycle_end_date
            ,d.prime_tagging_by_issuer_and_product
            ,source
            ,status as cause
            ,split_part(campaign_name ,'|', 1) as campaign
            ,split_part(campaign_name ,'|', 2) as sms_cycle_end_date
            ,split_part(campaign_name ,'|', 3) as day
            ,split_part(campaign_name ,'|', 4) as type
            ,to_char(to_date(split_part(campaign_name ,'|', 2) , 'DD/MM/YYYY'), 'YYYY-MM-DD') as campaign_date,
            d.payment_time, payload_event_timestamp  + interval '5:30 hours' as trigger_time
           ,count( s.user_id) as count
            from sms_callback_events s
            inner join new_data d
            on s.user_id = d.user_id
            where bucket_id > 'date_2021_11_30' and bucket_id < 'date_2022_01_15'
            and campaign_name like '%RC%'
            and event_name = 'SmsStatusUpdatedEvent'
            group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14
            """,conn)

在這個查詢中,我如何實現在trigger_time后 15 分鍾、30 分鍾和 60 分鍾內付款的用戶數量制作 3 列? 我是用 Pandas 做的,但我想在這里自己找到一種方法。 有人可以幫忙嗎?

我自己編寫了DATEDIFF function,它返回兩個日期之間的差值 integer,按天、按月、按年、按小時、按分鍾等的差異。您可以在查詢中使用這個 function。

DATEDIFF Function SQL GitHub 上的代碼

關於使用我們的DATEDIFF function 的示例查詢:

select 
    datediff('minute', mm.start_date, mm.end_date) as diff_minute
from 
    (
        select 
            '2022-02-24 09:00:00.100'::timestamp as start_date, 
            '2022-02-24 09:15:21.359'::timestamp as end_date 
    ) mm;



Result: 
---------------
  diff_minute 
---------------
 15
--------------- 

暫無
暫無

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

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