[英]MySQL Query from one table - Select same field twice
首先,我是MySQL的新手,如果在其他“條款”下已經回答過的問題我完全致歉。 我一直在尋找解決方案已有一個多星期了,但我無法提出一個解決方案,可能是因為我沒有使用正確的關鍵字。 在這種意義上,請忍受我和我的無知:)
我有一個包含以下字段的表:
ID int(11) NO PRI auto_increment
Building int(11) YES MUL
CounterNo int(11) YES MUL
ReadingDate datetime YES
StartMeter int(11) YES
EndMeter int(11) YES
CostKw decimal(10,6) YES
Multiplier smallint(3) YES
我想進行查詢,以填充比較折線圖,該查詢將返回以下內容:
Building | Cons1 | Cons2 | Month
1 1year ybefore Month
然后使用月份名稱填充X軸,而Cons1將是去年去年每個月的每個建築物的消耗量,而Cons2將是去年一年中每個月的每個建築物的消耗量。
我已經在玩了,到目前為止,我已經了解了以下內容:
SELECT Building,
CASE
WHEN ReadingDate >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
THEN (EndMeter - StartMeter)
ELSE NULL
END
AS 'Cons1',
CASE
WHEN ReadingDate BETWEEN DATE_SUB(NOW(), INTERVAL 2 Year) AND DATE_SUB(NOW(), INTERVAL 1 Year)
THEN (EndMeter - StartMeter)
ELSE NULL
END
AS 'Cons2',
CONCAT(
MONTHNAME (
tblElectricReadings.ReadingDate
)
) AS MonthRecorded
FROM tblElectricReadings
WHERE ReadingDate >= DATE_SUB(NOW(), INTERVAL 2 YEAR)
ORDER BY ReadingDate
這會產生我想要的結果,但不會“合並”(再次,很抱歉,如果我在此處使用錯誤的單詞)Cons1和Cons2在一起,而是將空值添加到兩個字段中,從而創建了我需要的記錄的兩倍。 基本上,查詢工作正常,但這不是我想要的結果。 我希望Cons1和Cons2都根據每個月填充相關的消耗量,以便可以相應地填充折線圖(包含2條線,其中1條代表Cons1,另一條代表Cons2)。
希望我已經足夠清楚,如果不能,請原諒並告訴我是否需要更多信息。
預先感謝您可能提供的任何幫助。
編輯:回答保羅-每個建築物每個月只有1個條目,所以這不是問題。 但是感謝您的注意! 也要感謝xQbert一百萬-您的答案正是我所要的:)感謝您的時間。
因為我們知道每個記錄都會有一個空值,所以使用最大值(或最小值)消除了空記錄值並將結果合並為一行/記錄。
SELECT Building,
max(CASE
WHEN ReadingDate >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
THEN (EndMeter - StartMeter)
ELSE NULL
END)
AS 'Cons1',
max(CASE
WHEN ReadingDate BETWEEN DATE_SUB(NOW(), INTERVAL 2 Year) AND DATE_SUB(NOW(), INTERVAL 1 Year)
THEN (EndMeter - StartMeter)
ELSE NULL
END)
AS 'Cons2',
CONCAT(
MONTHNAME (
tblElectricReadings.ReadingDate
)
) AS MonthRecorded
FROM tblElectricReadings
WHERE ReadingDate >= DATE_SUB(NOW(), INTERVAL 2 YEAR)
GROUP BY Building, CONCAT(MONTHNAME(tblElectricReadings.ReadingDate))
ORDER BY ReadingDate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.