mysql在一行中显示多行

时间:2015-10-14 12:35:15

标签: mysql

我在mysql中有一个表tbl_usi,其记录如下:


present_date    usi_value    deal_count    
----------------------------------------------------------
2015-10-13      b1              c1           
2015-10-12      b2              c2             
2015-10-11      b3              c3

我想编写一个查询,使用present_date字段来选择当前日期和它之前的日期,并将它们一起显示:

present_date    usi_value    deal_count    previous_date   previous_usi_value   previous_deal_count       
----------------------------------------------------------
2015-10-13      b1              c1         2015-10-12      b2                   c2         
2015-10-12      b2              c2         2015-10-11      b3                   c3          
2015-10-11      b3              c3         2015-10-10      b4                   c4          

我如何实现这一目标。感谢

2 个答案:

答案 0 :(得分:2)

从表格中选择所有内容,然后将其加入到自身中,确保2个连接的表格具有不同的名称,以便您区分它们(我使用过' a'' b'这里)。联接将日期抵消1天。然后,您可以从连接表中选择所需的字段。

select 
  a.present_date, 
  a.usi_value, 
  a.deal_count, 
  b.present_date as previous_present_date, 
  b.usi_value as previous_usi_value, 
  b.deal_count as previous_deal_count 
from
  tbl_usi as a 
  left join tbl_usi as b
    on b.present_date = a.present_date - interval 1 day;

如果你以前没有,那么你现在想要一个present_date列的索引也是BTW。

答案 1 :(得分:0)

替代方案,在有日期空白时有效。

select
  a.present_date, 
  a.usi_value, 
  a.deal_count, 
  b.present_date as previous_present_date, 
  b.usi_value as previous_usi_value, 
  b.deal_count as previous_deal_count 
from
  tbl_usi as a 
  join tbl_usi as b
where
  b.present_date = (select max(present_date) from tbl_usi where present_date < a.present_date);

与之前的解决方案一样,同一个表连接两次,但这次是通过子查询找到的前一行。