关于CASE WHEN主题有很多问题,但最接近我的问题与此有关如何使用CASE WHEN条件MAX()函数查询尚未解决。
下面是我的一些示例数据:
您可以使用dense_rank()来过滤表中的最后2个日期。之后,您可以使用sum()
的条件大小写表达式来计算所需的值
select [date],
sum_act = sum(case when rn = 1 then [debet] else 0 end),
sum_prev = sum(case when rn = 2 then [debet] else 0 end),
diff = sum(case when rn = 1 then [debet] else 0 end)
- sum(case when rn = 2 then [debet] else 0 end)
from
(
select *, rn = dense_rank() over (order by [date] desc)
from tbl
) t
where rn <= 2
group by [date]
,db<的在小提琴演示
两步:
- 获取最近三个日期的总和
- 显示最近两天的结果。
好吧,我们也可以在步骤1中获得所有的每日总和,但我们只需要最后三个来计算过去两天的总和,那么为什么要聚合比必要的更多的数据呢?
这是查询。在SQL Server中,您可能需要将日期列的名称放在括号中,因为date在SQL中是一个关键字。
select top(2)
date,
sum_debit_current,
sum_debit_previous,
sum_debit_current - sum_debit_previous as diff
(
select
date,
sum(debet) as sum_debit_current,
lag(sum(debet)) over (order by date) as sum_debit_previous
from table
where date in (select distinct top(3) date from table order by date desc)
group by date
)
order by date desc;
(SQL Server使用TOP(n)
而不是标准的SQLFETCH FIRST 3 ROWS
,而SELECT DISTINCT TOP(3) date
看起来像"获取前3行,然后在其日期上应用distinct",它实际上是"在日期上应用distinct,然后获得前3行";)