我正在使用以下查询从按 MeterNumber 分组的表中选择最近的和第三个最近的值。用户提供确定返回的最高值的月份和日期。
查询的目的是查看一米的水读数,看看它们在 3 个月内是否相同。如果是这样,则没有消耗发生,并且仪表可能已损坏。
我的问题是,我还想排除在 4 日、5 日、6 日……最近读取日期具有相同读数的任何仪表,因为这些仪表可能未使用。
任何帮助将不胜感激!我对此很陌生,所以也许有一种更有效/更好的方法来实现这一点。
我正在使用 MS SQL 2012。
SELECT
MeterNumber,
MAX(WaterRead) AS CurrentRead,
MAX(ReadDate) AS CurrentReadDate,
MIN(WaterRead) AS nthLastRead,
MIN(ReadDate) AS nthLastReadDate
From
(SELECT MeterNumber, ReadDate, WaterRead
FROM (
SELECT MeterNumber, ReadDate, WaterRead, Rank() over (Partition BY MeterNumber ORDER BY ReadDate DESC ) AS myRank
FROM WaterReads
) WaterReads WHERE myRank <= 3 ) a
Group By MeterNumber
Having MAX(WaterRead) - MIN(WaterRead) = 0 AND MAX(WaterRead) != 0 AND MIN(WaterRead) != 0 AND MIN(ReadDate) <> MAX(ReadDate)
AND MONTH(MAX(ReadDate)) = 6 AND DAY(MAX(ReadDate)) = 25
ORDER BY MeterNumber, CurrentReadDate
这将返回:
MeterNumber CurrentRead CurrentReadDate nthLastRead nthLastReadDate
80021139 12103 2013-06-25 12103 2013-04-24
80029512 5347 2013-06-25 5347 2013-04-24
80038245 304304 2013-06-25 304304 2013-04-24
80044119 46250 2013-06-25 46250 2013-04-24
80048357 6707 2013-06-25 6707 2013-04-24