我有一个简单的表格:
date name value
1/1/14 x 1
1/1/14 z 1
2/1/14 x 2
6/1/14 y 3
7/1/14 x 3
10/1/14 y 4
我想编写一个查询,该表格会为表中现有的每个日期返回每个姓名的所有最新值的列表。如果他们在那个日期存在 我不确定它是否可能。
因此查询输出看起来像这样
date name value
1/1/14 x 1
1/1/14 z 1
2/1/14 x 2
2/1/14 z 1
6/1/14 x 2
6/1/14 y 3
6/1/14 z 1
7/1/14 x 3
7/1/14 y 3
7/1/14 z 1
10/1/14 x 3
10/1/14 y 4
10/1/14 z 1
答案 0 :(得分:1)
你可以这样做,虽然它需要一些复杂的查询。首先,您必须生成所有行的列表,然后您需要获取值。以下查询对第一部分使用cross join
,为第二部分使用相关子查询:
select d.date, n.name,
(select s.value
from simple s
where s.name = n.name and s.date <= d.date
order by s.date desc
limit 1
) as value
from (select distinct date from simple s) d cross join
(select distinct name from simple n) n;