【问题标题】:SQL Help. How to line up values on the same row, shift one column up?SQL 帮助。如何在同一行上排列值,向上移动一列?
【发布时间】:2023-03-19 08:29:01
【问题描述】:

我在让列对齐时遇到问题,start_time 比 end_time 高一排。

这是我的代码:

SELECT  B.NAME
        ,MAX(case when DESCRIPTION = 'Green' then Final_Value end) as Start_Time
        ,MAX(case when DESCRIPTION = 'Red' then Final_Value end) as End_Time
          FROM mydata a
          JOIN ref_val B 
            ON A.ref_res = B.ref_res    
         WHERE B.COMPANY = 'abc'
         GROUP BY  B.NAME

这就是我想要的

The result looks like this:
    Name        Start_time              End_time           
1   John        5/6/15 6:30
2   John2       5/7/15 4:30           5/6/15 8:30          
3   Ben         5/8/15 2:30           5/7/15 7:25
4   Ben2        5/9/15 3:10           5/8/15 4:10

I want it to look like this:

    Name        Start_time              End_time            
1   John        5/6/15 6:30           5/6/15 8:30
2   John2       5/7/15 4:30           5/7/15 7:25         
3   Ben         5/8/15 2:30           5/8/15 4:10   
4   Ben2        5/9/15 3:10           5/9/15 5:20

【问题讨论】:

  • 你的架构是什么?
  • 您可能希望在查询之前显示示例数据

标签: mysql sql group-by case


【解决方案1】:

使用带有LEAD 的窗口函数。在这种情况下,最直接的做法是将您当前的查询按书面形式嵌套,然后在外部查询中应用您的分区。见:

http://mysqlserverteam.com/mysql-8-0-2-introducing-window-functions/

【讨论】:

    【解决方案2】:

    架构会有所帮助,但我怀疑驱动表不应该是mydata A,而是ref_val b,这样group by 和MAX 更有意义。根据实际架构,我可能完全错了:

    SELECT  B.NAME
        ,MAX(case when DESCRIPTION = 'Green' then Final_Value end) as Start_Time
        ,MAX(case when DESCRIPTION = 'Red' then Final_Value end) as End_Time
          FROM ref_val B
          JOIN mydata A 
            ON A.ref_res = B.ref_res    
         WHERE B.COMPANY = 'abc'
         GROUP BY  B.NAME
    

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 2021-11-03
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2020-10-11
      • 1970-01-01
      相关资源
      最近更新 更多