2016-03-15 71 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