CASE WHEN condition with MAX() function



关于CASE WHEN主题有很多问题,但最接近我的问题与此有关如何使用CASE WHEN条件MAX()函数查询尚未解决。

下面是我的一些示例数据:

debet2022-07-1557190.332022-07-14815616516.002022-07-1540866.672022-07-141221510.00

您可以使用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&lt的在小提琴演示

两步:

  1. 获取最近三个日期的总和
  2. 显示最近两天的结果。

好吧,我们也可以在步骤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行";)

相关内容

  • 没有找到相关文章

最新更新