【发布时间】:2015-07-08 17:51:57
【问题描述】:
我想做的是从我的表中为给定日期范围内的每个唯一时间戳选择一条记录。如果同一时间戳存在多个记录,我想获得最大的非零记录,或者如果只返回零值记录,我只想返回那些零值记录之一。 我一直在使用“几乎”的查询是
select timestamp, MAX(value) FROM myTable WHERE *conditions*... group by [timestamp] Order By [timestamp] ASC;
在返回的记录是零和负数之前它显然工作得很好,在这种情况下它返回零记录,因为它大于负记录。在这种情况下,我想返回负值记录之一,而不是零记录。如果我尝试通过将 where 语句更改为
来解决这个问题WHERE [Value] <> 0
如果只返回零值记录,我什么也得不到。我的优先级是每个时间戳返回一个最大的非零值记录,但如果只存在零值记录,则只返回其中一个,如果时间戳只存在空记录,我希望返回单个空记录。
【问题讨论】:
-
如果您只希望返回 1 条记录...为什么要按 timstamp 订购?由于
order by value desc,只有select timestamp, value from table where *conditions* order by value desc limit 1最大值将是第一条记录,并且限制1 将确保只有1 条记录返回。无论是 0 还是 1 值。现在,如果由于“条件”而根本没有记录,那就是另一回事了...但是您说记录正在恢复...正如您现在所拥有的那样,您返回的最大值可能没有关系到它旁边列出的时间戳... -
我只想要每个唯一时间戳 1 条记录,但我的查询可能会返回数百条唯一时间戳记录。例如,当我从每日数据表中查询 90 天时,我希望收到 90 条记录。
标签: mysql