我有一个包含以下字段的表
ID、日期、用户
现在我想用每个用户的最新日期返回条目的 ID。
我有一个解决方案,我查询每个用户的最新日期,然后根据日期和用户获取 id。
但我想直接在一个查询中获取 ID,因为我认为让 JOIN 查询根据日期和用户识别 ID 是错误的。它不是打败了 ID 的整个概念吗?如果我有 2 个人在同一秒内编辑同一个用户怎么办?
有谁知道该怎么做?
试试这个,它使用子查询来获取每个用户的最新日期。
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
您在哪里使用这些信息?将@@identity 与MS Access 一起使用是有效的。
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)
您的 ID 是连续的并在增加吗?
如果是这样的话
SELECT User, Max(ID), Max(date)
FROM table
GROUP BY user
否则,加入没有错。
部分答案:
它不是打败了 ID 的整个概念吗?
ID(PK)是唯一标识一条记录。不能保证只有一条记录与给定的用户和日期匹配(因为同一用户的多个条目可能具有相同的日期)。您可能对用户/日期有唯一约束以避免这种情况,但在这种情况下,您不需要 ID,因为用户和日期足以唯一标识记录。因此,请在此处重新考虑您对 ID 列的需求。
所以你想获取每个用户最近一次进入的 ID 和日期?
那将是这样的:
SELECT `ID`, `date`, `user`
FROM `table`
ORDER BY `date` DESC
GROUP BY `user`