2012-09-05 160 views
1

我有以下字段查詢最新的記錄包括ID

ID,日期,用戶

現在我想回到與每個用戶的最新日期的條目的ID的表。

我有,我查詢每個用戶的最新日期,然後根據日期和用戶獲得ID的解決方案。

但我想直接獲得ID在一個查詢,因爲我覺得它的錯誤有一個連接查詢確定根據日期和用戶的ID。 它不是打敗了整個ID的概念?如果我有兩個人在同一時間編輯同一用戶,該怎麼辦?

任何人知道如何做到這一點?

+0

爲什麼你需要這些ID?表格是否有更多列?那裏是否存在具有相同「用戶」和相同「日期」的行? –

+0

使用比MS Access更先進的數據庫的好處之一是能夠使用'RANK'和'PARTITION',這使得這樣的查詢變得微不足道。 – RedFilter

回答

0

您的ID是否連續增加?

如果是這樣

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

否則,沒有錯的加入。

+1

注意:這僅適用於僅按時間順序輸入日期。 – RedFilter

+0

@RedFilter是的,因此答案的第一行。 – podiluska

+0

你的第一行沒有提到日期,只有ID。即,ID 2的日期可能早於ID 1,在這種情況下,您的查詢將失敗。 – RedFilter

0

你在哪裏使用這些信息?在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) 
+0

我不認爲這個問題與插入有任何關係。 – RedFilter

+0

@RedFilter我做的,在此基礎上本着「不就戰勝ID的整個概念是什麼?如果我有2人編輯同一個用戶在同一秒」 – Fionnuala

+0

我覺得OP指的是做一個查詢獲取最大日期,然後再進行另一個查詢以基於該日期獲取完整行,同時另一個用戶編輯該行,即競爭條件。 – RedFilter

-1

所以,你想要得到的ID併爲每個用戶的最近一次入境日期?

這將是沿着線的東西:

SELECT `ID`, `date`, `user` 
FROM `table` 
ORDER BY `date` DESC 
GROUP BY `user` 
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 
0

的部分答案:

不就戰勝ID的整個概念?

的ID(PK)是唯一標識的記錄。不能保證只有一條記錄與給定的用戶和日期相匹配(因爲多個條目可能對同一用戶具有相同的日期)。您可能對用戶/日期有一個唯一的約束來避免這種情況,但在這種情況下,您不需要該用戶ID和日期就足以唯一標識該記錄。因此,請在這裏重新考慮您對ID列的需求。