2012-04-04 84 views
4

的最新「連勝」給定一個簡單的表格數據如下行:返回數據

id | result | played 
----+--------+------------ 
    7 | L  | 2012-01-07 
    6 | L  | 2012-01-06 
    5 | L  | 2012-01-05 
    4 | W  | 2012-01-04 
    3 | W  | 2012-01-03 
    2 | L  | 2012-01-02 
    1 | W  | 2012-01-01 

我將如何編寫一個查詢返回使用PostgreSQL行最新的丟失或連勝?在這種情況下,我正在尋找的結果:

id | result | played 
----+--------+------------ 
    7 | L  | 2012-01-07 
    6 | L  | 2012-01-06 
    5 | L  | 2012-01-05 

我猜的答案是使用lag()和分區的語法,但我似乎無法釘下來。

+0

'id'中的數字是否沒有漏洞?或者是「玩過」的日期?你的PostgreSQL版本是什麼? – 2012-04-04 03:24:23

回答

3

假設(如你不告訴),其

  • 正是那裏result兩個不同的值:(W, L)
  • id是順序的,因爲最新的條目具有最高的id

這將做的工作:

SELECT * 
FROM tbl 
WHERE id > (
    SELECT max(id) 
    FROM tbl 
    GROUP BY result 
    ORDER BY max(id) 
    LIMIT 1 
    ); 

這得到了WL最新的ID,這兩個第一的早。所以LIMIT 1得到相反結果的最後一項。行數比id高出最新連勝。瞧。

+1

不錯。我最終放棄了通過使用「播放」日期字段來代替id的假設。 – hpoydar 2012-04-04 20:46:08

+0

@ hpoydar:是的,和'玩'一起工作也是如此。 – 2012-04-04 22:21:55