3

ユーザーが回答するすべてのデータを格納するテーブルがあります。2012 年 1 月 1 日以降、システム内で何も更新されていない user_id を見つけようとしています。

各ユーザーは、データベースに約 500 個の item_id を持っています。私が処理しようとしているクエリは、特定の年以降データを更新していないすべてのユーザーの DISTINCT user_id を返します。すべての item_id を更新する必要があるわけではないため、検索しようとしている日時よりも大きい dt を持つ item_id がある場合は、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

HAVINGはいかがですか?

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 に答える