2010-11-04 60 views
0

我不確定如何在Google上進行此操作,所以讓我試着解釋一下。列車號碼是時間表中的一個插槽,因此每天重複一次。對於每列火車,從開始到結束都有一組事件,這些事件包括當前體重的值。 我想知道的是每列火車的高峯期。如果我只想要高峯,它將只是一個選擇*,最大(重量)...,但我希望它通過火車編號完成,以便我可以獲取日期/時間和車站名稱。 我想沿着線的東西:按字段查找不同值的峯值

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

請參閱下面的答案。 – Nightwish 2010-11-05 12:10:41

回答

1

如果你想要的最高權重爲每列列車─

SELECT train, Max(weight) FROM event_table WHERE date >= '2010/10/03' 
    AND date <= '2010/11/03' GROUP BY train 
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 

注意到這允許在同一最大重量多個電臺。

+0

+ 1打我吧 – 2010-11-04 19:24:33

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 
+0

+1更一般的語法:) – Randy 2010-11-04 19:31:14

+0

我想到了那些。我想我必須滿足於過濾重複的列車。 – Nightwish 2010-11-05 11:18:18

0

我不知道這是MySQL或Postgress,但我認爲這個查詢可以幫助:

SELECT train, 
max(weight) OVER (PARTITION BY train) 
FROM event_table ; 

*它工作在Postgres的8.4版本,不知道MySQL的

+0

不幸的是,它是MySql,所以不存在。 – Nightwish 2010-11-05 11:17:08

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