【发布时间】:2015-10-02 18:05:14
【问题描述】:
我有一张这样的桌子:
[日期]、[guid]、[值(整数)]
数据如下:
10/1, id1, 10
10/1, id2, 5
10/2, id1, 12
10/2, id2, 14
10/3, id1, 11
我想回来:
10/1, id1, 2
10/1, id2, 9
10/2, id1, -1
相同ID的匹配,抓取第二天(不是下一个日期)的值,使用过去的值,减去。
所以 10/1, id1, 2 是通过
10/1, id1, 10
10/2, id1, 12
所以我们返回第一天,10/1,和id,id1,12-10的值=2。
我将如何通过 SQL 执行此操作?
谢谢!
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
-
Date diff 总是 1 还是只是每个 id 的下一个日期?
-
如果是 SqlServer,请同时包括 2008、2012、2014 年
-
您说 id1 和 id2 是 GUID。我们是否也有一个关键的身份字段,以便我们可以知道哪个是何时创建的?如果 [value field] 存储为给定日期的第二个条目的负数,则这将是一个简单的 SUM,其中包含 GROUP BY[date], [guid]。没有它,我们将需要构建逻辑来确定应该翻转哪个标志。在您的示例中,请查看:
10/1, id1, 10和10/1, id1, 12,它们应该是10/1, id1, 2的摘要行我们怎么知道它应该是12-10 = 2而不是10-12 = -2没有订单? -
年份:2012 年,11.0.5343 无密钥标识。微软 SQL 服务器