Sql组合列的第一个和最后一个值以创建范围到第三列

问题描述 投票:0回答:1

我有下表

 WeekId  CalendarDate
 200     1993-06-26 00:00:00
 200     1993-06-27 00:00:00
 200     1993-06-28 00:00:00
 200     1993-06-29 00:00:00
 200     1993-06-30 00:00:00
 200     1993-07-01 00:00:00
 201     1993-10-02 00:00:00
 ...     ...................
 ...     ...................

我想在这里创建一个名为weekRange的单独列,它获取weekId的第一个日历日期和同一周Id的最后一个日历日期,结果如下:

例如:对于第200周,周数将是

1993-06-26 00:00:00 - 1993-07-01 00:00:00

这里的任何帮助非常感谢。谢谢

mysql sql
1个回答
2
投票

您可以在子查询上使用内部联接,最小值和最大值为weekId

  select m.WeekId, m.calendarDate, concat(t.min_date, ' - ' , t.max_date )
  from my_table m  
  inner join  (
      select  weekId 
      , min(calendarDate) min_date
          , max(calendarDate) max_date 
      from my_table  
      group by weekId 
  ) t on t.weekId = m.weekId 

一旦你更改了表添加weekRange列(作为varchar).. 你可以使用更新

  update my_table  m1 
  inner join  (

      select  weekId 
      , min(calendarDate) min_date
          , max(calendarDate) max_date 
      from my_table  
      group by weekId 
  ) t on t.weekId = m1.weekId 
  set  m1.weekRange  = concat(t.min_date, ' - ' , t.max_date )

以及评论中的日期格式

更新my_table m1内连接(

  select  weekId 
  , min(calendarDate) min_date
      , max(calendarDate) max_date 
  from my_table  
  group by weekId 
  ) t on t.weekId = m1.weekId 
 set  m1.weekRange  = concat(date_forma(t.min_date, '%m/%d/%Y'), 
        ' - ' , date_forma(t.max_date, '%m-%d-%Y') )
© www.soinside.com 2019 - 2024. All rights reserved.