[英]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.