这是我的查询(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)
的行。我该如何解决?感谢
答案 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;