MySQL 从一张表查询 - 选择相同的字段两次
Posted
技术标签:
【中文标题】MySQL 从一张表查询 - 选择相同的字段两次【英文标题】:MySQL Query from one table - Select same field twice 【发布时间】:2016-08-26 14:17:55 【问题描述】:首先,我是 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)。
我希望我已经足够清楚了,如果没有,请原谅我,如果您需要更多信息,请告诉我。
提前感谢您提供的任何帮助。
编辑:回答 Paul - 每个建筑物每个月只有 1 个条目,所以这不是问题。但感谢您注意到这一点!还要感谢 xQbert 的一百万 - 你的答案正是我想要的 :) 谢谢你的时间。
【问题讨论】:
使用 max 和 group by。类似于:***.com/questions/3263126/… 如果一个月内有多篇文章,你想拿哪一篇? 【参考方案1】:由于我们知道每条记录都会有一个空值,因此使用最大值(或最小值)消除空记录值并将结果合并到一行/记录中。
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
【讨论】:
以上是关于MySQL 从一张表查询 - 选择相同的字段两次的主要内容,如果未能解决你的问题,请参考以下文章
mysql同一张表中两个字段 关联另一张表的相同字段 查询出两个值