2016-06-07 38 views
0

我有MySQL表。我需要爲每個組選擇兩個最高值, ,但第二高值不能是「更近期」。如果項目1的最高值爲日期'2015-12-01',則第二高值必須早於'2015-12-01'。此日期是應用程序內的用戶輸入,例如:用戶輸入日期'2014-01-03',並按日期獲得2個最高價值訂單。SQl查詢 - 每個組2個最高值,第二個必須是「年輕」,然後第一個

  1. '2013年12月5日' - 500訪問
  2. '二○一三年十月十一日' - 480個viists

    + --------- + ----------- + ---------+ 
    | project | visits  | date  | 
    + --------- + ----------- + ---------+ 
    | 1   | 750   |2015-12-01| 
    | 1   | 582   |2014-11-01|   
    | 1   | 423   |2013-10-02| 
    | 2   | 666   |2016-01-01| 
    | 2   | 812   |2012-02-02| 
    | 2   | 450   |2014-03-05| 
    + --------- + ----------- + -------- + 
    

編輯:我試試這個(更復雜那麼上面的例子)+加入表由於ProjectName

set @num := 0, @group := ''; 

select ProjectName,visits, date 
        from 
        (
        select date, Projects_ID, visits, 
        @num := if(@group = `Projects_ID`, @num + 1, 1) as row_number, 
        @group := Projects_ID as col 
        from Hits 
        where date < '2016-01-11' and visits > 0 
        order by Projects_ID,date, visits desc 
        ) as x inner join Projects as p on x.Projects_ID = 
        p.ID 
        where x.row_number <= 2 
        group by ProjectName,Projects_ID, date 

我得到表中最高的價值,但我n有些情況的第二高值是「最近」,然後是最高值。

+2

我不明白規則。 「日期」不比其他日期「更年輕」 - 無論是更早或更晚。而且,對於您的樣本數據,預期的結果是什麼? –

+0

您的「用戶輸入日期」語句沒有意義 - 用戶選擇的日期與查詢有何關係? –

+0

@KristenWaite用戶通過UI在我的應用中選擇輸入值.. –

回答

1
SELECT a.visits, a.project, a.date 
FROM temper1 AS a 
WHERE (SELECT COUNT(*) 
     FROM temper1 AS b 
     WHERE b.project = a.project AND b.date >= a.date 
     ) <= 2 
ORDER BY a.visits ASC, a.date DESC 
+0

它可能不工作,查詢仍然runnig(很多分鐘)..是否存在更快的解決方案? –

相關問題