BigQuery按格式化日期排序时未考虑月份仅按日排序问题
问题原因
你排序时使用的dates字段是格式化后的字符串,并非日期类型。%d-%m-%Y格式的字符串会按照字典序排序:优先比对字符串首位的日数值,因此日数值更大的8月数据会排在9月数据之前,不符合按实际日期倒序的需求。
修正方案
你可以选择以下任意一种方式修正,两种方案均保留原有的DD-MM-YYYY格式输出:
方案1:直接调整排序字段
SELECT FORMAT_DATE('%d-%m-%Y', PARSE_DATE('%Y%m%d', event_date)) AS dates, COUNT(DISTINCT user_pseudo_id) AS Unistalls FROM `applied-buckeye-626.analytics_153768669.events_*` WHERE event_name='app_remove' AND _TABLE_SUFFIX > '20210828' GROUP BY dates, PARSE_DATE('%Y%m%d', event_date) ORDER BY PARSE_DATE('%Y%m%d', event_date) DESC LIMIT 1000
方案2:先聚合后格式化(性能更优)
先按日期类型完成分组、排序,最后再做日期格式化,避免重复解析日期:
SELECT FORMAT_DATE('%d-%m-%Y', event_dt) AS dates, Unistalls FROM ( SELECT PARSE_DATE('%Y%m%d', event_date) AS event_dt, COUNT(DISTINCT user_pseudo_id) AS Unistalls FROM `applied-buckeye-626.analytics_153768669.events_*` WHERE event_name='app_remove' AND _TABLE_SUFFIX > '20210828' GROUP BY event_dt ) t ORDER BY event_dt DESC LIMIT 1000
可选修正:你代码中统计字段命名
Unistalls为拼写错误,标准拼写为Uninstalls,可按需调整。
内容的提问来源于stack exchange,提问作者Rupesh Biswas
相关产品推荐
相关产品推荐

