繁体   English   中英

MySQL,从表中获取具有2个不同列的最新日期的行

[英]MySQL, getting rows from table with latest date from 2 different columns

我有一个mysql db,每天早晨从oracle db导入数据。 该表大约有3000万条记录。 这大约需要5-6个小时。 晚上再复制表格,以便可以从显示表格内容网格的网站访问它。

桌子看起来像这样

id     userID     fieldID    date1    date2
1         1           1       2014     2014
2         1           1       2014     2016
3         1           1       2013     2017
4         1           2       2014     2016
5         2           3       2014     2016

基本上在网站上,用户输入userID,我必须显示具有最新date1和最新date2的每个fieldID的记录,因此userID = 1的输出应为:

id     userID     fieldID    date1    date2
2         1           1       2014     2016
4         1           2       2014     2016

我到目前为止使用的查询是这样的:

SELECT id,UserID,fieldID,date1,date2 FROM mytable WHERE id = 
( SELECT id from mytable AS lookup 
  WHERE lookup.fieldID = mytable.fieldID
  ORDER BY date1 DESC, date2 DESC
  LIMIT 1 ) AND UserID=1

这可行,但是查询服务器和加载页面花费的时间太长,而如果我为特定的userID选择所有内容,则只需一秒钟就可以提取约2000行

我想知道您是否可以提出一个更好的查询或一种解决方法,而不是复制表,而是仅使用所需的记录来创建新表(晚上不使用该网站)。

谢谢

SELECT
id,
UserID,
fieldID,
(SELECT MAX(date1) FROM mytable WHERE fieldID=mt.fieldID) As DateOne,
(SELECT MAX(date2) FROM mytable WHERE fieldID=mt.fieldID) As DateTwo,  
FROM mytable mt 
WHERE UserID=1

怎么样:

SELECT  id, mytable.UserID, mytable.fieldID, A.date1, B.date2
FROM    mytable AS outer,
(
    SELECT      MAX(date1) AS date1
    FROM        mytable AS innerone
    WHERE       innerone.id=outer.id
    WHERE       innerone.UserID=outer.UserID
    AND         innerone.fieldID=outer.fieldID
    GROUP BY    innerone.id,
                innerone.UserID,
                innerone.fieldID
)       AS A,
(
    SELECT      MAX(date2) AS date2
    FROM        mytable AS innertwo
    WHERE       innertwo.id=outer.id
    WHERE       innertwo.UserID=outer.UserID
    AND         innertwo.fieldID=outer.fieldID
    GROUP BY    innertwo.id,
                innertwo.UserID,
                innertwo.fieldID
)       AS B
WHERE UserID=1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM