我在MS Access 2010中有以下示例数据表:
schedule_nr | part_number | name | date1 | date2 | difference|
------------|-------------|------|---------------|---------------|-----------|
12345 | 1 |Part1 |01-02-16 2:50 |01-02-16 2:50 | |
12345 | 2 |Part2 |01-02-16 2:54 |01-02-16 2:54 | |
12345 | 3 |Part3 |01-02-16 3:03 |01-02-16 3:03 | |
45678 | 1 |Part1 |02-02-16 2:15 |02-02-16 2:15 | |
45678 | 2 |Part2 |02-02-16 2:19 |02-02-16 2:19 | |
45678 | 3 |Part3 |02-02-16 2:27 |02-02-16 2:27 | |
23456 | 1 |Part1 |02-02-16 13:17 |02-02-16 13:17 | |
23456 | 2 |Part2 |02-02-16 13:21 |02-02-16 13:21 | |
23456 | 3 |Part3 |02-02-16 13:30 |02-02-16 13:30 | |
------------|-------------|------|---------------|---------------|-----------|
在专栏#34;差异"我需要在上一行的date2和date1之间有区别。从每个part_number = 1开始计数差异。所以决赛桌应该如下所示:
schedule_nr | part_number | name | date1 | date2 | difference|
------------|-------------|------|---------------|---------------|-----------|
12345 | 1 |Part1 |01-02-16 2:50 |01-02-16 2:50 |0:00:00 |
12345 | 2 |Part2 |01-02-16 2:54 |01-02-16 2:54 |0:04:00 |
12345 | 3 |Part3 |01-02-16 3:03 |01-02-16 3:03 |0:09:00 |
45678 | 1 |Part1 |02-02-16 2:15 |02-02-16 2:15 |0:00:00 |
45678 | 2 |Part2 |02-02-16 2:19 |02-02-16 2:19 |0:04:00 |
45678 | 3 |Part3 |02-02-16 2:27 |02-02-16 2:27 |0:08:00 |
23456 | 1 |Part1 |02-02-16 13:17 |02-02-16 13:17 |0:00:00 |
23456 | 2 |Part2 |02-02-16 13:21 |02-02-16 13:21 |0:04:00 |
23456 | 3 |Part3 |02-02-16 13:30 |02-02-16 13:30 |0:09:00 |
------------|-------------|------|---------------|---------------|-----------|
是否可以在MS Access中将其作为一个查询执行?
向所有人寻求帮助和提示。看起来它现在有效。再次感谢。
答案 0 :(得分:1)
此查询将给出您之后的结果 - 加入schedule_nr和下一个part_number。
如果T2返回NULL然后它是系列中的第一个数字,那么利用NZ将其与T1的日期交换,该日期将返回0。
SELECT T1.schedule_nr
,T1.part_number
,T1.sname
,T1.date1
,T1.date2
, CDATE(NZ(T2.date2,T1.date1) - T1.date1) AS Difference
FROM Table2 T1 LEFT JOIN Table2 T2 ON
T1.schedule_nr = T2.schedule_nr AND
T1.part_number = T2.part_number+1
答案 1 :(得分:0)
首先,如果您没有,请在表格中添加唯一自动增量ID 字段。
然后将表格左对齐:
SELECT
A.*
, B.Date1 AS [Date2]
, DateDiff ("n", A.Date1, B.Date1) AS [Difference]
FROM
YourTable AS A
INNER JOIN
YourTable AS B
ON A.ID = B.ID - 1
答案 2 :(得分:0)
从数据看来,您对“前一行”的定义似乎是:
schedule_nr
和part_number
减去一个(很大的假设**你的数据没有空白)这可用于JOIN
的搜索条件。
我们还需要考虑part_number = 1
的特殊情况,即当没有前一行时,则默认为零。
这两个案例可以UNION
- 一起编辑:
SELECT current.schedule_nr, current.part_number,
DATEDIFF('N', prior.Date2, current.Date1) AS difference_in_minutes
FROM YourTable AS prior
INNER JOIN YourTable AS current
ON prior.schedule_nr = current.schedule_nr
AND prior.part_number = ( current.part_number - 1 )
UNION
SELECT current.schedule_nr, 1 AS part_number,
0 AS difference_in_minutes
FROM YourTable AS current
WHERE current.part_number = 1
**如果part_number
的{{1}}序列中存在间隙,那么“前一行”的谓词稍微复杂一点,即找到小于当前schedule_nr
的最大值part_number
{1}} part_number
。