...其中“缺失记录”与最后记录的值相同,因此没有记录。
可能主观,但我希望有一种标准化的方法。
所以,假设我在MySQL表中有一堆分析。有一些缺失的信息,但如上所述,这是因为它们的先前值与当前值相同。
table "table":
id value datetime
1 5 1285891200 // Today
1 4 1285804800 // Yesterday
2 18 1285804800 // Yesterday
2 16 1285771094 // The day before yesterday
正如您所看到的,我今天没有id 2的值。
如果我想从此表中提取“最近的值”(即1的“今天”和2的“昨天”,我该怎么做?我通过运行以下查询来实现它:< / p>
SELECT id, value FROM (SELECT * FROM table ORDER BY datetime DESC) as bleh GROUP BY id
利用子查询首先对数据进行排序,然后依靠“GROUP BY”从每个id中选择第一个值(由于它是有序的,因此是最新的)。但是,我不知道是否推送子查询是获得最新值的最佳方法。
你会怎么做?
理想的表格:
id value datetime
1 5 1285891200 // Today
2 18 1285804800 // Yesterday
...谢谢
答案 0 :(得分:1)
必须爱MySQL才能在子查询中允许订单。 SQL标准不允许这样做:)
您可以使用标准投诉方式重写查询:
select *
from YourTable a
where not exists
(
select *
from YourTable b
where a.id = b.id
and a.datetime < b.datetime
)
如果在子查询中存在无法拆分的重复项,您可以group by
然后选择一个任意值:
select a.id
, max(a.value)
, max(a.datetime)
from YourTable a
where not exists
(
select *
from YourTable b
where a.id = b.id
and a.datetime < b.datetime
)
group by
a.id
这会选择共享最新a.value
的最大datetime
。现在datetime
对于所有重复行都是相同的,但标准SQL不知道这一点,因此您必须指定一种从相同日期中选择的方法。在这里,我使用的是max
,但min
甚至avg
也可以正常使用。