2

列を持つ架空のテーブル「users」があります

  • user_id(自動インクリメント)
  • 名前
  • foo
  • バー
  • 最終更新

このテーブルは1日に複数回更新されます。X日前に、ユーザーごと、1日ごとに、最後の更新を取得するためにクエリを実行するにはどうすればよいですか?

サンプルデータ

1 John a b "2013-01-31 02:01:12"
2 Rich c d "2013-01-31 22:41:12"
3 John e f "2013-01-31 22:01:15"
4 Rich g h "2013-02-01 16:01:12"
5 John i j "2013-02-01 22:21:12"
6 Rich k m "2013-02-01 22:21:12"

希望する返品セット:

2 Rich c d 2013-01-31
3 John e f 2013-01-31
5 John i j 2013-02-01
6 Rich k m 2013-02-01

次のクエリを使用して、ユーザーごとに最後に更新されたものを取得できます。これは、私が苦労している毎日に適用されます。

SELECT u1.*
FROM users u1 
    LEFT JOIN users u2
    ON (u1.name = u2.name AND u1.user_id < u2.user_id)
WHERE u2.user_id IS NULL
4

2 に答える 2

0

これを行うには、日付レベルでデータを要約してから、再度参加します。

select u.*
from users u join
     (select u.nanme, DATE(last_updated) as thedate, MAX(last_updated) as maxlastupdated
      from users u
      group by u.name, DATE(last_updated)
     ) usum
     on u.name = usum.name and
        u.last_updated = usum.maxlastupdated
于 2013-02-01T21:54:04.750 に答える
0

まず第一にusers、これらはユーザーではなくログインであるため、テーブル名は非常に紛らわしいです。

それを超えて、あなたは正しい道を進んでいます。結合の日付に比較を追加する必要があります。

SELECT u1.*
FROM users u1
    LEFT JOIN users u2
    ON (u1.name = u2.name AND date_format(u1.last_updated, '%Y-%m-%d') = date_format(u2.last_updated, '%Y-%m-%d') AND u1.user_id < u2.user_id)
WHERE u2.user_id IS NULL

このSQLフィドルで機能することを確認してください。

于 2013-02-01T21:59:14.063 に答える