sql - 在 SQL 中,我需要一列的最大值并返回最大值和相应的日期
问题描述
我一直在研究这个问题并发现了几个类似的问题,但所提供的答案都不适用于我的情况。所以,我想伸出手直接摆出我的姿势
基本上,我需要返回一个最大值,其中月份等于 1 月、2 月或 3 月(第一季度)等等,每个名称的第二季度到第四季度,并返回最大值发生的对应日期。
例如,我的表可能看起来像这样:(但是,还有更多的名称、日期和货币值)
姓名 | 钱 | 日期 |
---|---|---|
约翰 | 1000 | 1-15-20 |
约翰 | 200 | 5-30-20 |
约翰 | 2000 | 8-30-20 |
约翰 | 800 | 11-19-20 |
我需要一个这样的表返回:
姓名 | Q1 最大值 | 日期 | Q2 最大值 | 日期 | Q3 最大值 | 日期 | 第四季度最大 | 日期 |
---|---|---|---|---|---|---|---|---|
约翰 | 1000 | 1-15-20 | 200 | 5-30-20 | 2000 | 8-30-20 | 800 | 11-19-20 |
解决方案
您要查找的查询应如下所示:
with data as (
select 'John' as name, 1000 as "money", cast('1-15-20' as date) as "date" union all
select 'John', 200, cast('5-30-20' as date) union all
select 'John', 2000, cast('8-30-20' as date) union all
select 'John', 800, cast('11-19-20' as date)
)
select
name,
max(case when month("date") in (1,2,3) then money else null end) as Q1Max,
max(case when month("date") in (1,2,3) then date else null end) as "DateQ1",
max(case when month("date") in (4,5,6) then money else null end) as Q2Max,
max(case when month("date") in (4,5,6) then date else null end) as "DateQ2",
max(case when month("date") in (7,8,9) then money else null end) as Q3Max,
max(case when month("date") in (7,8,9) then date else null end) as "DateQ3",
max(case when month("date") in (10,11,12) then money else null end) as Q4Max,
max(case when month("date") in (10,11,12) then date else null end) as "DateQ4"
from data
group by name
当月份在条件组中时,您只需要获得最大值case when
输出
姓名 | Q1Max | 日期Q1 | Q2Max | 日期Q2 | Q3Max | 日期Q3 | Q4Max | 日期Q4 |
---|---|---|---|---|---|---|---|---|
约翰 | 1000 | 2020-01-15 | 200 | 2020-05-30 | 2000 | 2020-08-30 | 800 | 2020-11-19 |