在数据库中有个表aa

根据名称分组,选择最大日期和最小日期的数据,并显示在一行上

 

现在要根据名称分组,选择最大日期和最小日期的数据,并显示在一行上,

首先要根据名称分组,取得最大日期 然后 union all 根据名称分组,选取最小日期,效果如图

select top 100 percent aa.names,aa.s,aa.createdate from 
(
    (select   top 100 percent names,min(createdate) as 日期
    from aa
    group by names
    )
    union ALL
    (select   top 100 percent names,max(createdate) as 日期
    from aa
    group by names
    )
)t 
inner join aa on t.names=aa.names and t.日期=aa.createdate
order by t.names, t.日期

根据名称分组,选择最大日期和最小日期的数据,并显示在一行上

 

变成一行的话,要按名称查询,先查出最小数据,然后关联刚才的查询结果,条件是名称相等,日期不等

select t1.names,t1.s,t1.createdate,t2.s,t2.createdate from 
(
        select top 100 percent aa.names,aa.s,aa.createdate from 
        (
            select   top 100 percent names,min(createdate) as 日期
            from aa
            group by names    
        )t 
        inner join aa on t.names=aa.names and t.日期=aa.createdate
) t1
left join 
(
        select top 100 percent aa.names,aa.s,aa.createdate from 
        (
            (select   top 100 percent names,min(createdate) as 日期
            from aa
            group by names
            )
            union ALL
            (select   top 100 percent names,max(createdate) as 日期
            from aa
            group by names
            )
        )t 
        inner join aa on t.names=aa.names and t.日期=aa.createdate
)t2 on t1.names=t2.names and t1.createdate <> t2.createdate
order by t1.names

根据名称分组,选择最大日期和最小日期的数据,并显示在一行上

 

一定要用左联接,不然,只有一条的数据,就被过滤掉了。

 

相关文章:

  • 2022-12-23
  • 2022-02-20
  • 2021-07-27
  • 2022-12-23
  • 2021-08-29
  • 2021-06-21
  • 2022-12-23
  • 2022-01-02
猜你喜欢
  • 2022-12-23
  • 2022-02-26
  • 2021-09-27
  • 2021-11-05
  • 2022-12-23
  • 2021-12-12
  • 2021-09-02
相关资源
相似解决方案