SQL需求:特定日期仅Android来源时第5列返回true否则null
解决特定日期来源仅为Android时返回True的SQL实现
需求说明
针对表格中的日期维度,当某一日期下所有记录的来源字段仅为Android时,新增的第5列返回true;只要该日期存在其他来源,第5列返回null。
可行SQL写法
写法一:统计日期内不同来源数量
SELECT *, CASE WHEN COUNT(DISTINCT 来源) OVER (PARTITION BY 日期) = 1 AND MAX(来源) OVER (PARTITION BY 日期) = 'Android' THEN true ELSE null END AS 第五列 FROM 你的表名;
逻辑:按日期分组后,先判断该日期下的来源种类是否只有1种,再确认这个唯一来源是Android,满足则返回true。
写法二:检查日期内是否存在非Android来源
SELECT *, CASE WHEN SUM(CASE WHEN 来源 != 'Android' THEN 1 ELSE 0 END) OVER (PARTITION BY 日期) = 0 THEN true ELSE null END AS 第五列 FROM 你的表名;
逻辑:按日期分组后,统计该日期下非Android的记录总数,总数为0说明全是Android,返回true。
关于你用partition未达预期的可能原因
大概率是只针对单条记录做了判断,而非对整个日期分组的所有来源做校验。比如如果仅判断当前行的来源是Android就返回true,会导致同一日期里有其他来源时,Android的行也会返回true,不符合需求。
内容的提问来源于stack exchange,提问作者user20378711
相关产品推荐
相关产品推荐

