1

次のフィールドを持つテーブルがあります

ID、日付、ユーザー

ここで、ユーザーごとの最新の日付でエントリの ID を返したいと思います。

ユーザーごとに最新の日付を照会し、日付とユーザーに基づいて ID を取得するソリューションがあります。

しかし、日付とユーザーに基づいて JOIN クエリで ID を識別するのは間違っていると思うので、ID を 1 つのクエリで直接取得したいと考えています。それはIDの概念全体を打ち負かしていませんか? 2 人のユーザーが同じユーザーを同時に編集しているとどうなりますか?

誰もそれを行う方法を知っていますか?

4

5 に答える 5

1

これを試してみてください。サブクエリを使用して、ユーザーごとの最新の日付を取得します。

SELECT *
FROM tableNAme a INNER JOIN
    (
    SELECT  user, MAX(date) maxDate
    FROM    tableName
    GROUP BY user
    ) b ON a.user = b.user AND
            a.date = b.maxDate
于 2012-09-05T15:12:58.013 に答える
0

部分的な答え:

IDの概念全体を打ち負かしませんか?

ID(PK)は、レコードを一意に識別するためのものです。特定のユーザーと日付に一致するレコードが1つだけであるという保証はありません(複数のエントリが同じユーザーに対して同じ日付を持つ可能性があるため)。これを回避するためにユーザー/日付に一意の制約がある場合がありますが、その場合、ユーザーと日付でレコードを一意に識別するのに十分であるため、IDは必要ありません。したがって、ここでID列の必要性を再検討してください。

于 2012-09-05T15:32:07.817 に答える
0

この情報をどこで使用していますか? MS Access で @@identity を使用することは有効です。

Dim db As Database
Set db = CurrentDb

db.Execute "INSERT INTO Table2 (test) Values('abc')", dbFailOnError

Dim rs As DAO.Recordset

Set rs = db.OpenRecordset("select @@identity")
Debug.Print rs(0)
于 2012-09-05T15:00:50.207 に答える
0

ID は連続しており、増加していますか?

もしそうなら

SELECT User, Max(ID), Max(date)
FROM table
GROUP BY user

それ以外の場合、結合に問題はありません。

于 2012-09-05T15:01:16.523 に答える
-1

各ユーザーの最新のエントリの ID と日付を取得しますか?

それは次のようなものです。

SELECT `ID`, `date`, `user`
FROM `table`
ORDER BY `date` DESC
GROUP BY `user`
于 2012-09-05T15:02:01.360 に答える