我在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
我如何实现这一目标。感谢
答案 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);
与之前的解决方案一样,同一个表连接两次,但这次是通过子查询找到的前一行。