获取

时间:2017-07-11 08:50:03

标签: sql datetime max

这是我的查询(DateTime是DateTime的cloumn):

SELECT 
    DateTime, Value
FROM
    History
WHERE   
    TagName = 'G_Z'
    AND DateTime > '2017-07-10 07:00:00.000'
    AND DateTime < '2017-07-17 07:00:00.000'
    AND wwRetrievalMode = 'Cyclic'
    AND Value IS NOT NULL

我得到了这些结果:

2017-07-10 08:39:48.1180000 1,89486229419708
2017-07-10 10:19:36.2370000 1,89486229419708
2017-07-10 11:59:24.3560000 1,93500030040741
..and so on...

我试图只从查询中获取最新值。我尝试了SELECT max(DateTime) as Time,但收到了错误

  

列'History.Value'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

所以我最后添加了group by Value。这有效,但给了我10行,而不仅仅是max(date)的行。我该如何解决?感谢

2 个答案:

答案 0 :(得分:1)

max - 子句中应用select会将返回的行数更改为一(如果不使用group by),但不会从DB中选择一行。 max的值是使用DB中的行作为输入进行计算的结果。这就是您的查询不起作用的原因。解决问题的方法是使用子查询找出最大DateTime并仅选择外部查询中具有此值的行:

SELECT DateTime, Value
FROM History
WHERE TagName = 'G_Z'
  AND DateTime > '2017-07-10 07:00:00.000'
  AND DateTime < '2017-07-17 07:00:00.000'
  AND wwRetrievalMode = 'Cyclic'
  and Value is not NULL
  AND DateTime = (
      SELECT max(DateTime)
      FROM History
      WHERE TagName = 'G_Z'
        AND DateTime > '2017-07-10 07:00:00.000'
        AND DateTime < '2017-07-17 07:00:00.000'
        AND wwRetrievalMode = 'Cyclic'
        and Value is not NULL
  ) 

答案 1 :(得分:0)

您可以使用order by和limit而不是max来获取最新值

SELECT DateTime, Value
FROM    History
WHERE   TagName = 'G_Z'
AND DateTime > '2017-07-10 07:00:00.000'
AND DateTime < '2017-07-17 07:00:00.000'
AND wwRetrievalMode = 'Cyclic'
and Value is not NULL
order by DateTime desc
limit 1;