Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询每个用户的最新记录包括id_Sql_Ms Access - Fatal编程技术网

Sql 查询每个用户的最新记录包括id

Sql 查询每个用户的最新记录包括id,sql,ms-access,Sql,Ms Access,我有一个包含以下字段的表 ID、日期、用户 现在,我想返回条目的ID以及每个用户的最新日期 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 我有一个解决方案,我查询每个用户的最新日期,

我有一个包含以下字段的表

ID、日期、用户

现在,我想返回条目的ID以及每个用户的最新日期

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
我有一个解决方案,我查询每个用户的最新日期,然后根据日期和用户获取id

但是我想在一个查询中直接获取ID,因为我认为让JOIN查询根据日期和用户标识ID是错误的。 它不是击败了身份的整个概念吗?如果我让两个人在同一秒钟内编辑同一个用户会怎么样


有人知道怎么做吗?

你在哪里使用这些信息?将@@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是连续的还是不断增加的

如果是的话


否则,加入就没有问题。

那么您想获取每个用户最近输入的ID和日期吗

这大致可以说是:

SELECT `ID`, `date`, `user`
FROM `table`
ORDER BY `date` DESC
GROUP BY `user`

试试这个,它使用子查询来获取每个用户的最新日期

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
部分答案:

它不是击败了身份的整个概念吗


ID(PK)用于唯一标识记录。不能保证只有一条记录与给定的用户和日期匹配(因为同一用户的多个条目可能具有相同的日期)。为了避免这种情况,您可能对user/date有一个唯一的约束,但是在这种情况下,您不需要ID,因为user和date足以唯一地标识记录。因此,请重新考虑您对此处ID列的需要。

注意:这仅适用于仅按时间顺序输入日期的情况。@RedFilter Yes,因此答案的第一行。您的第一行没有说明日期,只有ID。也就是说,ID 2的日期可能早于ID 1,在这种情况下,您的查询将失败。我认为这个问题与插入无关。@RedFilter我是这样做的,基于这一行,“它不会破坏ID的整个概念吗?如果我让两个人在同一秒钟内编辑同一个用户怎么办?”我认为OP指的是执行一个查询以获得最大日期,然后再进行另一个查询,根据该查询获取完整的行,同时另一个用户编辑该行,即竞争条件。为什么需要ID?这个表有更多的列吗?是否存在具有相同
用户
和相同
日期
的行?使用比MS Access更高级的数据库的优点之一是能够使用
排名
分区
,这使得类似的查询变得微不足道。