2012-03-22 25 views
1

我已经将数据集上的任务委托给从其他数据源预提取的数据集,并且我目前只有Access可用于查询此数据(Excel的基本数据分析较少比目前的行限制)。从本质上讲,我有三个相关领域:用于提取时间戳差异的SQL查询

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 

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

现在我已被授权忽略存在多于一对的情况(通过忽略,我的意思是只计算最初的一对),但它不是优选的。

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

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

我的确了解SQL并且在C#中精通足够,但时间框架和其他因素对我的逻辑分解能力造成了巨大破坏。

+2

您正在使用哪种RDBMS? – 2012-03-22 04:17:45

+0

这是什么来自我不知道,我只能访问一个电子表格,我不得不导入到Access(我相信这是Jet Engine)。我无法访问源数据库,并且由于我们的基础架构,无法获取访问权限,并且除了作为大型机作业之外,不能运行查询。 – 2012-03-22 04:22:07

+0

您是否可以确保在相同fk_id的时间戳中不会有重叠。换句话说,每个START后跟STOP,而不是另一个START。 – 2012-03-22 04:22:07

回答

2

假设表名是表1,在访问我会做这样的事情:

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并获得查询之间的差异(以秒为 - 您没有提到这部分)。你会遇到的一个问题是一个交易有多个条目。你可以做一个GROUP BY来得到第一个BEGIN和最后的END,但它们可能会有一些差异。

我希望这可以帮助你一点。

+0

+1,因为它不能加入常量值,所以发布了一些与JET协同工作的东西。 – 2012-03-22 05:21:36