繁体   English   中英

同一张表中各行之间的日期之间的差异

[英]Difference between dates in rows within a same table

|ID      |AN      |CRN      |CRT      |SD       |ED 
+-------------------------------------------------------------------
|1       |a       |x        |R        |01-Aug-10| 09-Sep-10
|1       |a       |y        |R        |10-Sep-10| 08-Dec-10 
|1       |a       |z        |R        |20-Dec-10| 
|1       |a       |z        |S        |01-Aug-10| 31-Jan-10
|1       |a       |v        |S        |01-Feb-10| 
|2       |b       |d        |S        |01-Aug-10| 29-Aug-10
|2       |b       |d        |S        |31-Aug-10|  

这就是Iam从上表中查找的内容。 我想知道sd和ed之间的区别。 查询应查看ID是否相同,如果相同,则CRT应该相同,如果相同,则应显示差异,否则应为0,因此查询需要检查每一行。帐户不同,则查询应默认显示0。

因此结果应显示如下内容

|ID      |AN      |CRN      |CRT      |SD       |ED         |Difference
+-------------------------------------------------------------------
|1       |a       |x        |R        |01-Aug-10| 09-Sep-10 |0 *(since this is 1st entry in respect to the CRT within the same ID)*
|1       |a       |y        |R        |10-Sep-10| 08-Dec-10 |1 *(10sept(SD)-9sept(ED))*
|1       |a       |z        |R        |20-Dec-10|           |12 
|1       |a       |z        |S        |01-Aug-10| 31-Jan-10 |0 *(since this is 1st entry in respect to the CRT within the same ID)*
|1       |a       |v        |S        |01-Feb-10|           |1 *(1Feb(SD)-31Jan(ED))*
|2       |b       |d        |S        |01-Aug-10| 29-Aug-10 |0 *(since this is a new ID)*
|2       |b       |d        |S        |31-Aug-10|           |2 

在区别列中,我只需要区别而无需()中提到的叙述。 请帮忙......

正确执行此操作的关键是使表具有顺序(AutoNumber)键,该键与您的行顺序匹配。 如果表上还没有类似的键,那么您需要将值插入到具有“自动编号”字段作为键的新临时表中。 我已经用名为TempID的AutoNumber键将其放入名为MyTable的表中。

然后,您需要使用以下定义创建一个名为PreviousRow的查询:

SELECT [TempID]+1 AS PreviousTempID, MyTable.ID, MyTable.AN, MyTable.CRN, MyTable.CRT, MyTable.SD, MyTable.ED FROM MyTable;

然后,您的结果是以下查询:

SELECT MyTable.ID, MyTable.AN, MyTable.CRN, MyTable.CRT, MyTable.SD, MyTable.ED, IIf([MyTable.ID]=[PreviousRow.ID] And [MyTable.CRT]=[PreviousRow.CRT],DateDiff("d",[PreviousRow.ED],[MyTable.SD]),0) AS Difference FROM MyTable LEFT JOIN PreviousRow ON MyTable.TempID = PreviousRow.PreviousTempID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM