我想返回user_activity的最后7天,但是对于那些空的日子,我想添加0作为值
说我有这张桌子
actions | id | date ------------------------ 67 | 123 | 2019-07-7 90 | 123 | 2019-07-9 100 | 123 | 2019-07-10 50 | 123 | 2019-07-13 30 | 123 | 2019-07-15
这应该是过去7天的预期输出
actions | id | date ------------------------ 90 | 123 | 2019-07-9 100 | 123 | 2019-07-10 0 | 123 | 2019-07-11 <--- padded 0 | 123 | 2019-07-12 <--- padded 50 | 123 | 2019-07-13 0 | 123 | 2019-07-14 <--- padded 30 | 123 | 2019-07-15
到目前为止,这是我的查询,我只能得到最近的7天,但不确定添加默认值是否肯定
SELECT * FROM user_activity WHERE action_day > CURRENT_DATE - INTERVAL '7 days' ORDER BY uid, action_day
Kaushik Naya.. 5
您可以离开并加入您的餐桌generate_series
。首先,您需要一种将行用于不同ID的方法。然后可以将该集与主表正确连接。
WITH days AS (SELECT id,dt FROM ( SELECT DISTINCT id FROM user_activity ) AS ids CROSS JOIN generate_series( CURRENT_DATE - interval '7 days', CURRENT_DATE, interval '1 day') AS dt ) SELECT coalesce(u.actions,0) ,d.id ,d.dt FROM days d LEFT JOIN user_activity u ON u.id = d.id AND u.action_day = d.dt
演示
您可以离开并加入您的餐桌generate_series
。首先,您需要一种将行用于不同ID的方法。然后可以将该集与主表正确连接。
WITH days AS (SELECT id,dt FROM ( SELECT DISTINCT id FROM user_activity ) AS ids CROSS JOIN generate_series( CURRENT_DATE - interval '7 days', CURRENT_DATE, interval '1 day') AS dt ) SELECT coalesce(u.actions,0) ,d.id ,d.dt FROM days d LEFT JOIN user_activity u ON u.id = d.id AND u.action_day = d.dt
演示