保留组中的第一条记录,并在sql中用null/0填充rest?

cetgtptt  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(335)

我的数据库中有下表:

date sales
1  2010-12-13    10
2  2010-12-13    10
3  2010-12-13    10
4  2010-12-13    10
5  2010-12-13    10
6  2010-12-14    20
7  2010-12-14    20
8  2010-12-14    20
9  2010-12-14    20
10 2010-12-14    20

有没有办法只获取第一条记录,并用null或0填充剩余的组?由于分组将按日期和销售额进行:
例如,预期输出为:

date sales
1  2010-12-13    10
2  2010-12-13    0
3  2010-12-13    0
4  2010-12-13    0
5  2010-12-13    0
6  2010-12-14    20
7  2010-12-14    0
8  2010-12-14    0
9  2010-12-14    0
10 2010-12-14    0

因此,基本上是保留第一条记录,但将组中的其余记录设为0(如果更快/更容易,则可能为null)
最接近解决这个问题的方法是通过一个内部连接获得第一条记录——但我认为一个分区可以解决这个问题——就在此时!
感谢您的帮助!
我可以使用sqlite,但也可以使用gcp(sql)

fcg9iug3

fcg9iug31#

这可能适用于sqlite:

CASE WHEN id = MIN(id) OVER(PARTITION BY date) THEN sales ELSE 0 END as sales

如果没有,您可以准备一个每个日期只有min id的子查询并将其加入:

SELECT
   CASE WHEN y.id IS NULL THEN 0 ELSE sales END as sales
FROM
  x
  LEFT JOIN (SELECT MIN(id) as id FROM x GROUP BY date) y ON x.id= y.id

相关问题