2016-03-15 76 views
1

我有兩個表'sites'和'index_log'。表'網站'是關於網站(用戶ID,名稱,描述等)的信息。表索引_日誌具有列日期,索引_計數和網站ID。所以我想最後和以前index_log一行爲每個站點,其中userid = 10,這是我的變種:加入Max和Max前行

SELECT ff.id, 
     ff.siteurl, 
     ff.last_count, 
     ff.last_date, 
     il2.index_count as previous_count, 
     MAX(il2.date) as previous_date 
FROM (
    SELECT s.siteurl, 
      s.id, 
      il.index_count as last_count, 
      MAX(il.date) as last_date 
    FROM sites s 
    LEFT JOIN index_logs il ON il.siteid = s.id 
    WHERE s.userid = 10 
    GROUP BY s.id 
    ) as ff 
LEFT JOIN index_logs il2 ON il2.siteid = ff.id AND il2.date < ff.last_date 
GROUP BY ff.id 

但在這個變體index_count柱(去年及以前)不匹配,最大日起一行。我希望能爲你提供幫助。

+0

這不是有效的SQL Server查詢你最後2日誌條目,看起來像MySQL? – dnoeth

+0

是什麼讓你說@dnoeth? – Squirrel

+0

'GROUP BY'不包括SELECT列表中的所有非聚合列... – dnoeth

回答

0

這將讓每sites.id

; with CTE as 
(
    SELECT s.siteurl, s.id, il.index_count, il.date, 
      RN = ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY il.date DESC) 
    FROM sites s 
    JOIN index_logs il ON il.siteid = s.id 
    WHERE s.userid = 10 
) 
SELECT * 
FROM CTE 
WHERE RN <= 2 
+0

對不起,它不能在mysql中工作 –

+0

我不知道你在使用MySQL – Squirrel

+0

MySQL是否有類似ROW_NUMBER()的函數? – Squirrel