我对数据库编程相当陌生。查询以识别每个终端ID的差距
我有一个记录事务行(每个都有一个唯一的ID)的表 - 唯一的ID由正在处理事务的终端/ PC定义。
例如:
PC1将起始于100,并执行交易将去101,102,103,104等
PC2将在200开始,并且将去201,202,203,204 etc
所有这些都在同一个表中,所以TransactionIDs是混乱的(即第一个入口将用于PC1,接下来的两个将是PC2,然后是PC1的另一个 - 这是由于它们按时间戳排序)
我想做一个查询,w在ID中显示大于100的任何间隙,但仅针对与PC相关的ID(否则结果将显示101和204作为“间隙”)
期望的结果将是两个ID之间的差距100加上时间戳和PC名称。
我已经做了一个类似于这个查询以查找时间戳中的差距,但不确定abvoe是否如此简单。这是查询:
WITH ordered AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY date) rn
FROM Table1
)
SELECT o1.ID id1, o1.DATE date1, o2.ID id2, o2.DATE date2, DATEDIFF(s, o1.date, o2.date) diff
FROM ordered o1 JOIN ordered o2
ON o1.rn + 1 = o2.rn
WHERE DATEDIFF(s, o1.date, o2.date) > 120
有什么想法?
而且,如果包含样本数据和期望的输出,它会更清晰。 – sstan
我必须指出当PC超过100次交易时会发生什么缺陷,并且他们流入其他范围?总的来说,这是一个糟糕的主意。 – Jeremy
我刚刚使用该范围作为示例,我使用的数据库的ID范围为15位数,因此渗入其他范围不是问题。为了简单起见,我只是使用三位数字的ID – JMac