我不确定如何谷歌这个,所以让我试着解释一下。列车编号是时间表中的一个插槽,因此每天重复。对于每列火车,从开始到结束都有一组事件,这些事件包括当前重量的值。 我想知道的是每列火车的高峰期。如果我只是想要达到峰值,它只会是选择*,最大(重量)...... ,但我想通过列车编号来完成,这样我就可以得到日期/时间和站名。 我想要的是:
SELECT train, weight, date, station FROM event_table WHERE date >= '2010/10/03'
AND date <= '2010/11/03' ORDER BY weight DESC LIMIT 1 GROUP BY train
但显然GROUP BY不能超过极限。我的选择是忽略限制并在PHP中过滤它,但它浪费了周期和带宽,这可能是未来的问题。
由于
答案 0 :(得分:1)
如果您想要为每列火车提供最高重量 -
SELECT train, Max(weight) FROM event_table WHERE date >= '2010/10/03'
AND date <= '2010/11/03' GROUP BY train
答案 1 :(得分:1)
这样的事情应该这样做:
select t.train, t2.wt, t.date, t.station
from event_table t, ( SELECT train, max(weight) wt
FROM event_table
WHERE date >= '2010/10/03'
AND date <= '2010/11/03'
GROUP BY train
) t2
where t.train = t2.train
and t.weight = t2.weight
请注意,这允许在多个站点使用相同的最大重量。
答案 2 :(得分:1)
作为Randy答案的替代方案,您可以使用Join语法。
SELECT *
FROM
event_table et
INNER JOIN (
SELECT
train,
Max(weight) weight
FROM
event_table
WHERE date >= '2010/10/03'
AND date <= '2010/11/03'
GROUP BY train) max
ON et.train = max.train and et.weight = max.weight
答案 3 :(得分:0)
我不确定这是用于MySQL还是Postgres,但我认为这个查询可能会有所帮助:
SELECT train,
max(weight) OVER (PARTITION BY train)
FROM event_table ;
*它适用于版本8.4的postgres,不确定MySQL
答案 4 :(得分:0)
我似乎改进了我的Google Foo。 I found this question并提出了答案。供参考:
SELECT r2.train, r2.wight, r2.date, r2.station
FROM (
SELECT (
SELECT id
FROM event_table ri
WHERE ri.train = r1.train and date >= '2010-10-01' AND date <= '2010-12-01'
ORDER BY
ri.weight DESC
LIMIT 1
) rid
FROM (
SELECT DISTINCT train
FROM event_table
where date >= '2010-10-01' AND date <= '2010-12-01'
) r1
) ro, event_table r2
WHERE r2._id = ro.rid