SQL基于条件分组的最大日期按项目分组

huangapple go评论78阅读模式
英文:

SQL MAX date based on criteria group by item

问题

项目 日期 状态列
WidgetA 2022-01-03 1
WidgetB 2022-01-04 1
WidgetA 2022-01-05 2
WidgetB 2022-01-06 2
WidgetA 2022-01-02 1
WidgetB 2022-01-01 1

我想按项目分组,并在状态为1时取最小日期,在状态为2时取最大日期。

项目 起始日期 完成日期
WidgetA 2022-01-02 2022-01-05
WidgetB 2022-01-01 2022-01-06

不确定从哪里开始。

英文:
Item Date Status Column
WidgetA 2022-01-03 1
WidgetB 2022-01-04 1
WidgetA 2022-01-05 2
WidgetB 2022-01-06 2
WidgetA 2022-01-02 1
WidgetB 2022-01-01 1

I want to group by Item and have min(date) where status = 1 and max(date) where status = 2

Item start complete
WidgetA 2022-01-02 2022-01-05
WidgetB 2022-01-01 2022-01-06

Not sure where to start here.

答案1

得分: 1

这可以通过条件聚合来实现:

使用 min() 获取开始日期,使用 max() 获取完成日期:

select Item,
       min(case when status = 1 then Date end) as start,
       max(case when status = 2 then Date end) as complete
from mytable
group by Item

这段代码适用于主要的数据库,如 mysqlpostgresql...

在 mysql 上的演示

英文:

This can be done using the conditional aggregation

min() to get the start date and max() to get the complete date

select Item,
       min(case when status = 1 then Date end) as start,
       max(case when status = 2 then Date end) as complete
from mytable
group by Item

This code works on major databases such as mysql and postgresql...

Demo on mysql

huangapple
  • 本文由 发表于 2023年5月11日 05:56:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/76222828.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定