基于MS-SQL中的多个字段的SELECT

时间:2018-06-25 14:43:46

标签: sql sql-server

我有一个包含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)。

3 个答案:

答案 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