我想在SQL中选择数据集中最新的非零条目。大多数示例只返回日期和分组变量,但我也希望返回相关值。例如:
ID Date Value
----------------------------
001 2014-10-01 32
001 2014-10-05 10
001 2014-10-17 0
002 2014-10-03 17
002 2014-10-20 60
003 2014-09-30 90
003 2014-10-10 7
004 2014-10-06 150
005 2014-10-17 0
005 2014-10-18 9
使用
SELECT ID, MAX(Date) AS MDate FROM Table WHERE Value > 0 GROUP BY ID
返回:
ID Date
-------------------
001 2014-10-05
002 2014-10-20
003 2014-10-10
004 2014-10-06
005 2014-10-18
但是,每当我尝试将Value作为所选变量之一时,SQLServer会出现一个错误:
“在选择列表中,因为该列没有包含在聚合函数或GROUP BY子句中,所以列'Value'无效。”
我的期望结果是:
ID Date Value
----------------------------
001 2014-10-05 10
002 2014-10-20 60
003 2014-10-10 7
004 2014-10-06 150
005 2014-10-18 9
我想到的一个解决方案是,在原始表格中查找结果,返回对应于相关ID和日期(我已经将其剪裁并且我知道这些是唯一的)的值,但在我看来,这似乎是一种混乱的解决方案。如果能提供帮助,我将不胜感激。
注意:我不想按Value分组,因为这是最终要提取的结果(即对于每个ID,我都想要最新的Value)。举个例子:
ID Date Value
----------------------------
001 2014-10-05 10
001 2014-10-06 10
001 2014-10-10 10
001 2014-10-12 8
001 2014-10-18 0
在这里,我只需要最后一个非零条目。(001、2014-10-12、8)
SELECT ID, MAX(Date) AS MDate, Value FROM Table WHERE Value > 0 GROUP BY ID, Value
Would return:
ID Date Value
----------------------------
001 2014-10-10 10
001 2014-10-12 8