我遇到了一个有趣的情况,我希望通过一个简单的查询可以解决...但我无法设法形成查询......
table
node trigger value date
A A3 5 2016-01-12 00:00:00
A A1 4 2016-01-12 00:00:00
B B2 3 2016-01-12 01:00:00
A A3 1 2016-01-13 00:00:00
这是我最接近查询的地方。
SELECT DISTINCT(node, trigger), value
FROM table
ORDER BY node, trigger, date DESC;
我希望DISTINCT在节点 / 触发器对上执行。显示多个节点 / 触发器对,因为它们具有不同的值,即不唯一,因此不会被DISTINCT删除。添加GROUP BY似乎没有帮助。上表中查询的答案应该是这样的......
node trigger value
A A1 4
A A3 1
B B2 3
答案 0 :(得分:0)
我通常使用基表中的最大数据值创建一个子集,从而创建一组只有最大日期和节点。然后连接回基集以获得所需的其余值。
在这种情况下,我创建了一个内联视图,它是每个节点都有最大日期的集合。
SELECT A.node, A.trigger, A.value
FROM table A
INNER JOIN (Select node, max(date) as MDate From Table GROUP BY node) B
on B.Node = A.Node
and B.MDate = A.Date
ORDER BY A.Node, A.Tigger
根据rdbms,可能需要转义触发器列。使用rdbms方法
区别不起作用
答案 1 :(得分:0)
即使日期在SQL-Server中起作用至少
,这也会给你不同SELECT t.node, t.[trigger], (SELECT TOP 1 value from [Table] t2 where t2.node=t.node and t2.[trigger]=t.[trigger] order by [date] desc)
FROM
(SELECT DISTINCT node, [trigger]
FROM [Table]) as t