我想要一个这样的表:
cycle_end_date | count(user_id) | count(repaid_user_id) | event_ts | repayment_ts
15th Jan | 20 | 15 | 23rd Jan | 25th Jan
15th Jan | 30 | 30 | 24th Jan | 24th Jan
我正在使用以下查询:
select
date(cycle_end_date) as cycle_end_date
,date(payload_event_timestamp + interval '5 hours 30 minutes') as event_date
,d.payment_date
,count( s.user_id) as count
,count(case s.user_id when d.payment_date < event_date then 1 else 0 end) as repaid_users
d.payment_date取自另一个查询-
case when ots_created_at is null then
current_date else date(ots_created_at + interval ' 5 hours 30 minutes')
end as payment_date
这给了我一个错误:ProgrammingError: operator does not exist: character varying = boolean
基本上,我想要在事件触发当天还款的用户数。基本上,如果事件日期等于还款日期,我们可以发现这些用户在该事件日期付款。如何找到这个?
您试图使用;缩写";案例表达式的开头是这样的:
case s.user_id when d.payment_date
为了使这种格式有效,when之后的语法假设相等的比较(例如when d.payment_date
假设=
(,并且在这种简短形式中,它只能是假设的相等运算符。对于更复杂的比较(小于、不等于等(,有必要使用更长格式的事例表达式,如以下所示:
case when d.payment_date < event_date then user_id end
请注意,聚合函数COUNT((为每个非null值递增,因此为了避免计算任何不需要的条件,请不要使用else
返回任何值。例如
count(case when d.payment_date < event_date then user_id end) as col1
或者,如果您希望在查询代码中更明确,请使用else
返回不计算在内的NULL,例如
count(case when d.payment_date < event_date then user_id else NULL end) as col1
注:您可以使用这样的常量:,而不是返回列值
count(case when d.payment_date < event_date then 1 end) as col1