列の min() と max() の両方と、min() および max() 関数に対応するもう 1 つの列を取得する必要がある状況があります。INNER JOIN を使用してクエリを試しましたが、min() または max() を使用すると成功しました。両方を使用すると、何も返されません。
SELECT A.IslandCode, CONVERT(DATE, A.LogTime)LogTime
, MN.Demand MinDemand, MN.TIME MinDemandAt
FROM
(
SELECT IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
) A
INNER JOIN
(
SELECT TOP 1 IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand,
STR(DATEPART(HOUR, LogTime)) + ':' + LTRIM(STR(DATEPART(MINUTE, LogTime))) TIME
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
ORDER BY Demand
) MN
ON A.IslandCode = MN.IslandCode AND A.LogTime = MN.LogTime AND A.Demand = MN.Demand
上記のクエリは次の結果を返します。これは正しいです
IslandCode LogTime MinDemand MinDemandAt
1 2013-08-13 698 13:0
max() のクエリ
SELECT A.IslandCode, CONVERT(DATE, A.LogTime)LogTime
, MX.Demand MaxDemand, MX.TIME MaxDemandAt
FROM
(
SELECT IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
) A
INNER JOIN
(
SELECT TOP 1 IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand,
STR(DATEPART(HOUR, LogTime)) + ':' + LTRIM(STR(DATEPART(MINUTE, LogTime))) TIME
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
ORDER BY Demand DESC
) MX
ON A.IslandCode = MX.IslandCode AND A.LogTime = MX.LogTime AND A.Demand = MX.Demand
戻ります、これも正しいです
IslandCode LogTime MaxDemand MaxDemandAt
1 2013-08-13 1463 20:0
ただし、両方のクエリが同じクエリで使用されている場合、何も返されません
SELECT A.IslandCode, CONVERT(DATE, A.LogTime)LogTime
, MX.Demand MaxDemand, MX.TIME MaxDemandAt
, MN.Demand MinDemand, MN.TIME MinDemandAt
FROM
(
SELECT IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
) A
INNER JOIN
(
SELECT TOP 1 IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand,
STR(DATEPART(HOUR, LogTime)) + ':' + LTRIM(STR(DATEPART(MINUTE, LogTime))) TIME
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
ORDER BY Demand DESC
) MX
ON A.IslandCode = MX.IslandCode AND A.LogTime = MX.LogTime AND A.Demand = MX.Demand
INNER JOIN
(
SELECT TOP 1 IslandCode, CONVERT(DATE, LogTime) LogTime, SUM(KiloWatt) Demand,
STR(DATEPART(HOUR, LogTime)) + ':' + LTRIM(STR(DATEPART(MINUTE, LogTime))) TIME
FROM ph_MachineDailyReadings
WHERE IslandCode = 1 AND CONVERT(DATE, LogTime) = '2013-08-13'
GROUP BY IslandCode, LogTime
ORDER BY Demand
) MN
ON A.IslandCode = MN.IslandCode AND A.LogTime = MN.LogTime AND A.Demand = MN.Demand
期待される結果
IslandCode LogTime MinDemand MinDemandAt MaxDemand MaxDemandAt
1 2013-08-13 1463 20:0 698 13:0
この結果を単一のクエリで取得できますか、それともストアド プロシージャ ベースのソリューションを使用する必要がありますか?
前もって感謝します