【发布时间】:2012-02-09 14:18:43
【问题描述】:
我有一个看起来像这样的表:
timestamp value person
===============================================
2010-01-12 00:00:00 33 emp1
2010-01-12 11:00:00 22 emp1
2010-01-12 09:00:00 16 emp2
2010-01-12 08:00:00 16 emp2
2010-01-12 12:12:00 45 emp3
2010-01-12 13:44:00 64 emp4
2010-01-12 06:00:00 33 emp1
2010-01-12 15:00:00 12 emp5
我想找到与每个人相关的最大值。显而易见的查询是:
select person,max(value) from table group by person
现在我想包含与每个 max(value) 关联的时间戳。我无法在上述查询中使用时间戳列,因为众所周知,它不会出现在 group by 子句中。所以我写了这个:
select x.timestamp,x.value,x.person from table as x,
(select person,max(value) as maxvalue from table group by person order by maxvalue
desc) as y
where x.person = y.person
and x.value = y.maxvalue
这在一定程度上有效。我现在看到了:
timestamp value person
===============================================
2010-01-12 13:44:00 64 emp4
2010-01-12 12:12:00 45 emp3
2010-01-12 06:00:00 33 emp1
2010-01-12 00:00:00 33 emp1
2010-01-12 08:00:00 16 emp2
2010-01-12 09:00:00 16 emp2
2010-01-12 15:00:00 12 emp5
问题是现在我得到了 emp1 和 emp2 的所有条目,它们最终具有相同的 max(value)。
假设在 emp1 和 emp2 之间,我只想看到具有最新时间戳的条目。 IOW,我想要这个:
timestamp value person
===============================================
2010-01-12 13:44:00 64 emp4
2010-01-12 12:12:00 45 emp3
2010-01-12 06:00:00 33 emp1
2010-01-12 09:00:00 16 emp2
2010-01-12 15:00:00 12 emp5
我需要编写什么样的查询?是否可以扩展我编写的嵌套查询以实现我想要的,或者是否必须从头开始重写所有内容?
如果它很重要,因为我使用的是 Sqlite,时间戳实际上存储为儒略日。我使用 datetime() 函数将它们转换回每个查询中的字符串表示形式。
【问题讨论】:
标签: sqlite group-by aggregate-functions