2015-07-03 77 views
0

這是我的第一個問題,我沒有找到任何答案來解決我的問題,所以我決定打開一個新的問題。如何獲取MSACCESS表中的第一個和最後一個事件?

我使用的是從excel文件導入的表「訪問」,所以沒有主鍵,就像這樣:

ID | Enter_date | Exit_date 10 | 08/06/2015 | 08/06/2015 11 | 08/06/2015 | 09/06/2015 12 | 08/06/2015 | 09/06/2015 10 | 18/06/2015 | 30/06/2015 10 | 02/07/2015 | 03/07/2015 11 | 12/06/2015 | 14/06/2015 12 | 10/06/2015 | 14/06/2015 12 | 02/07/2015 | 03/07/2015

所以,我試圖創建一個查詢選擇在桌子上的最後一個寄存器ID的第一個寄存器,忽略中間寄存器,用於更好地解釋我期待這樣的結果:

ID | Enter_date | Exit_date 10 | 08/06/2015 | 08/06/2015 10 | 02/07/2015 | 03/07/2015 11 | 08/06/2015 | 09/06/2015 11 | 12/06/2015 | 14/06/2015 12 | 08/06/2015 | 09/06/2015 12 | 02/07/2015 | 03/07/2015

我開始了一個代碼,我可以得到FIR ST登記,但問題是最後的= /因爲有些ID的有3人2行:

SELECT k.ID, k.Enter_date, k.Exit_date 
FROM 
(SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS RowNo, 
ID, Enter_date, Exit_date FROM Access)k 
WHERE k.RowNo=1 
+0

寄存器是由輸入日期還是退出日期表示的? –

+0

在「註冊」我的意思是當id出現在桌子上。每次出現的id都是這個id的註冊表。無論日期如何,每一行都是一個寄存器。 –

+0

您的查詢如何工作? MS Access不支持'row_number'。如果還需要'as'作爲表別名。 –

回答

0

假設Enter_date & Exit_date不重疊,下面應該工作。警告,空氣密碼。 SELECT ID, Min(Enter_date) as EnterDate, Max(Exit_date) as ExitDate FROM tblRegisters Group By ID UNION SELECT ID, MAX(Enter_date) as ExitDate, Max(Exit_date) as ExitDate FROM tblRegisters Group By ID

+0

它的工作!謝謝。幾乎沒有任何修改,例如將每個示例^^的MAX(Enter_date)更改爲ExitDate,將其更改爲MAX(Enter_date)爲EnterDate。有沒有辦法來包含空值?最大功能不包括空值,也許我需要包括然後=/ –

+0

最簡單的方法是替換一些不明確的值。就像MAX(Nz(Enter_date,#1/1/3000#)。除此之外,我能想到的唯一的事情就是向UNION添加另一部分,在空值的情況下會給你額外的行。 SELECT ID,最小值(Enter_date)作爲EnterDate,MAX(Exit_date)作爲ExitDate FROM tblRegisters WHERE Exit_date IS NULL分組依據ID – AVG

+0

謝謝,下面的代碼適合目標: SELECT ID,Enter_date,Exit_date FROM SHEET1 WHERE Exit_date IS NULL UNION SELECT ID,閔(Enter_date)作爲enterdate,閔(Exit_date)作爲exitdate FROM表Sheet1集團通過ID UNION SELECT ID,MAX(Enter_date)作爲enterdate,MAX(Exit_date)作爲exitdate FROM表Sheet1集團通過ID 但我有一些行的值(ID,Enter_date)重複,我必須刪除使用excel。 –

相關問題