2015-07-03 76 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。 –

相关问题