我有一个包含4列的表格:
AcctNumb | PeriodEndingDate | WaterConsumption | ReadingType
每个AcctNumb都有多个记录,每个记录的记录日期。
我想做的就是获取每个帐户的最新日期,消费读数和阅读类型。
我尝试使用MAX(PeriodEndingDate)
和GROUP BY AcctNumb
,但是我需要汇总所有其他值,并且所有汇总函数都无法帮助我解决WaterConsumption等问题。
有人能指出我正确的方向吗?
谢谢
编辑
这是示例表
+----------+------------------+------------------+-------------+
| AcctNumb | PeriodEndingDate | WaterConsumption | ReadingType |
+----------+------------------+------------------+-------------+
| 1000 | 2018-03-31 | 122230 | A |
| 1001 | 2018-03-31 | 24850 | A |
| 1002 | 2018-03-31 | 88540 | A |
| 1000 | 2017-12-31 | 123800 | A |
| 1001 | 2017-12-31 | 3000 | E |
+----------+------------------+------------------+-------------+
ReadingType是实际(A)读数还是估计(E)。
答案 0 :(得分:0)
这可以使用ROW_NUMBER完成。已被要求回答数千次,但查询比查找重复项更容易编写。
select *
from
(
select *
, RowNum = ROW_NUMBER() over(partition by AcctNumb order by PeriodEndingDate)
from YourTable
) x
where x.RowNum = 1
答案 1 :(得分:0)
尝试一下
SELECT
AcctNumb,
PeriodEndingDate,
WaterConsumption,
ReadingType
FROM (SELECT
AcctNumb,
PeriodEndingDate,
WaterConsumption,
ReadingType,
ROW_NUMBER() OVER (PARTITION BY AcctNumb ORDER BY PeriodEndingDate DESC) AS MostrecentRecord
FROM <TableName>) dt
WHERE MostrecentRecord= 1
答案 2 :(得分:0)
SELECT DQ.* FROM
(SELECT *,
Row_Number() OVER (PARTITION BY AcctNumb ORDER BY PeriodEndingDate DESC) AS RN
FROM YourTable
) AS DQ
WHERE DQ.RN = 1