我对SQL很陌生,请耐心等待!我试图写一个T-SQL查询(SSMS)从数据库中检索两个不同的最大“数量”来自同一个“名称”值,命名为“meter_data”,在下面的格式:SQL Server查询同一列中的多个值
Name Date Time Value Quantity
------------------------------------------
Meter1 29-08-17 19:00 2.1 Amps
Meter1 29-08-17 19:30 2.5 Amps
Meter1 29-08-17 20:00 2.2 Amps
Meter1 29-08-17 19:00 231 Volts
Meter1 29-08-17 19:30 232 Volts
Meter1 29-08-17 20:00 235 Volts
Meter2 29-08-17 19:00 16.1 Amps
Meter2 29-08-17 19:30 17 Amps
Meter2 29-08-17 20:00 17.1 Amps
Meter2 29-08-17 19:00 415 Volts
Meter2 29-08-17 19:30 413 Volts
Meter2 29-08-17 20:00 412 Volts
etc... etc... etc... etc...
查询的结果应返回以下数据:
Meter 1
Amps 2.5
Volts 235
这里是我的查询:
SELECT MAX(Value)
FROM meter_data
WHERE Name = 'Meter1'
AND (Quantity = 'Amps')
AND (Quantity = 'Volts')
上述结果是:
Meter1
NULL
查询结果是明显是不正确,因为它与两个Quantity
和在一起并返回NULL值。我尝试了几种不同的方式来达到这个目的(INNER JOIN
,IN
,INTERSECT
...)但是对于我的生活,我无法弄清楚我要去哪里错了。是否应该有另一个WHERE子句?
没有要求免费的代码,但如果有人可以指向我在正确的方向我会很感激!
谢谢。
你必须使用'组by':'SELECT名称,数量,MAX (价值)FROM meter_data GROUP BY名称,数量' – Marcelo
@Marcelo你有正确的答案,但你不需要这个名字吗?选择max(value)作为最大值,从meter_data组中按数量选择数量; – markg
不,我不需要结果中的名称,只是特定仪表的'Amps'和'Volts'的最大值。 – EnergyAuto