用于提取时间戳差异的SQL查询

时间:2012-03-22 04:16:05

标签: sql ms-access timestamp

我被委派了一个数据集上的任务,该数据集已从其他数据源中预先提取出来,而我目前只有Access可用于查询此数据(Excel用于基本数据分析,目前小于行限制) )。基本上,我有三个相关领域:

FK_ID =与交易相关联的任意数字

CD =与交易状态相关的代码(假设只有BEGIN和END是值)

TIMESTAMP =交易的时间戳

现在是这个数据集的简化示例:

FK_ID           CD                 TIMESTAMP
000012          END                2012-01-02-14.27.59.133612
000012          BEGIN              2012-01-02-14.27.57.176631
000015          END                2011-12-12-14.27.59.133612
000015          BEGIN              2011-12-11-14.27.59.133612
000019          END                2011-11-10-14.27.59.133612
000019          BEGIN              2011-11-09-14.27.59.133612
000019          END                2011-11-08-14.27.59.133612
000019          BEGIN              2011-11-07-14.27.59.133612

正如你所看到的,它不是很复杂,问题是我需要为每个唯一的FK_ID计算BEGIN和END代码之间的时间戳差异,然后创建一个列来计算这个差异,同时也考虑到了一些事实FK_ID具有与之关联的多个时间戳BEGIN / END对。

现在我被授权忽略存在多对的情况(通过忽略,我的意思是只计算那对初始对),但这不是优选的。

我需要获得这些差异,以确定总时间,以确定该时间是否在我们的目标范围内。

为每个FK_ID对或您建议的其他自动方式获取此时间戳差异的最佳查询是什么?

我确实理解SQL并且对C#非常熟练,但时间框架和其他因素严重破坏了我在逻辑上打破这个问题的能力。

1 个答案:

答案 0 :(得分:2)

假设表名是TABLE1,在Access中我会做类似的事情:

SELECT Table1.FK_ID, DateDiff("s",[TABLE1].[TIMESTAMP],[END_QUERY].[TIMESTAMP]) AS DifferenceInSeconds
FROM Table1 

INNER JOIN 

(SELECT Table1.FK_ID, Table1.CD, Table1.TIMESTAMP
FROM Table1
WHERE (((Table1.CD)="END"))
ORDER BY Table1.FK_ID, Table1.CD) AS END_QUERY 


ON Table1.FK_ID = END_QUERY.FK_ID
WHERE (((Table1.CD)="BEGIN"))
ORDER BY Table1.FK_ID, Table1.CD;

基本上,在两个子查询中获取所有BEGIN和END并获得查询之间的差异(以秒为单位 - 您没有提及此部分)。您将遇到的一个问题是trasaction有多个条目。你可以做一个GROUP BY来获得第一个BEGIN和最后一个END,但它们可能存在一些差异。

我希望这对你有所帮助。