3

我有一个存储用户回答的所有数据的表。我试图找出自 2012 年 1 月 1 日以来哪些 user_id 没有更新系统中的任何内容。

每个用户在数据库中将有大约 500 个 item_id。我正在尝试处理的查询将返回自给定年份以来未更新其数据的每个用户的 DISTINCT user_id。并非所有 item_id 都必须更新,因此如果任何 item_id 的 dt 大于我试图查找的日期时间,那么我需要忽略它们,即使它是 1 条记录。我只想要自 2012 年以来未更新单个字段的 user_id。

任何帮助或推动正确的方向表示赞赏。

谢谢!

桌子

CREATE TABLE IF NOT EXISTS `item_results` (
`item_id` int(11) NOT NULL DEFAULT '0',
`user_id` int(11) NOT NULL DEFAULT '0',
`result` text NOT NULL,
`specifier` text NOT NULL,
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
UNIQUE KEY `item_id` (`item_id`,`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
4

2 回答 2

4

怎么样?

select user_id, max(dt)
from item_results
group by user_id
having max(dt) < '2012-01-01'
于 2012-09-07T16:13:42.553 回答
3

您需要创建一个子查询来获取它们的最新dt值(MAX VALUE),如下所示(如果您想获取用户上次更新的所有列,它可以工作。 )

SELECT  a.*
FROM item_results b
        INNER JOIN
        (
            SELECT user_id, MAX(`dt`) lastUpdated
            FROM item_results
            GROUP BY userID
        ) a ON a.user_ID = b.user_ID AND
               a.lastUpdated = b.`dt`
WHERE DATE(a.lastUpdated) < '2012-01-01'

或者简单地说(您正在寻找的那个。

SELECT user_id
FROM item_results
GROUP BY userID
HAVING DATE(MAX(`dt`)) < '2012-01-01'

希望这可以帮助。

在此处输入图像描述

于 2012-09-07T16:12:49.293 回答