【发布时间】:2019-01-12 18:42:46
【问题描述】:
我一周以来一直在寻找这个问题。我尝试了很多代码,但我无法得到正确的答案,这就是问题所在: 我有一个卖家表,每次客户联系这个卖家时,他是否卖了东西。
表卖家(我会为一个卖家提供数据,只是为了给你一个更具体的问题)
- SellerID - phonecalldate - Sequence - Selling (Bool)
- 100 - 2018-01-05 - 1 - 0
- 100 - 2018-01-05 - 2 - 0
- 100 - 2018-01-05 - 3 - 1
- 100 - 2018-01-05 - 4 - 0
- 100 - 2018-01-05 - 5 - 0
- 100 - 2018-01-10 - 1 - 0
- 100 - 2018-01-10 - 2 - 0
- 100 - 2018-01-10 - 3 - 0
- 100 - 2018-01-10 - 4 - 1
- 100 - 2018-01-10 - 5 - 0
- 100 - 2018-01-10 - 6 - 0
- 100 - 2018-01-10 - 7 - 0
- 100 - 2018-01-10 - 8 - 0
- 100 - 2018-01-10 - 9 - 0
- 100 - 2018-01-10 - 10 - 0
我想:有多少次他在电话之间没有卖出。 我应该在这个模型 3 中有答案:
1- a sequence of 2 during 2018-01-05 sequence 1 to 2018-01-05 sequence 2
2- a sequence of 5 during 2018-01-05 sequence 4 to 2018-01-10 sequence 3
2- a sequence of 6 during 2018-01-10 sequence 5 to 2018-01-10 sequence 10
我现在所做的是:我尝试找到边界并获取这两个边界之间的计数(我知道数据库从 2018-01-05 开始)所以我使用 2018-01-01 作为最低日期最低边界在左连接中,我使用 getdate()+1 将明天的日期作为最高边界:
Select '2018-01-01' as Date1, SellerID as Seller1, 0 as Sequence1 from Seller Group by Seller
Union ALL
Select phonecalldate as Date1, SellerID as Seller1, 0 as Sequence1 from Seller Where Selling = 'true' group by phonecalldate , SellerID , Sequence
) as Boundary1
Left JOIN (
Select * from (
Select getdate()+1 as Date2, SellerID as Seller2, 0 as Sequence2 from Seller Group by Seller
Union ALL
Select phonecalldate as DateMatch2, SellerID as Seller2, Sequence as Sequence2 from Seller Where Selling = 'true' ) as Boundary2
ON Boundary1.Seller1 = Boundary2 .Seller2 and ((Boundary1.Date1 = Boundary2.Date2 and Boundary1.Sequence1 < Boundary2 .Sequence2) or (Boundary1.Date1 < Boundary2.Date2 ))
这个查询返回:
- (第一个查询)左连接(第二个查询)
- 2018-01-01 - 100 - 0 - 2018-01-05 - 100 - 3
- 2018-01-01 - 100 - 0 - 2018-01-10 - 100 - 4
- 2018-01-01 - 100 - 0 - 2019-01-12 - 100 - 0
- 2018-01-05 - 100 - 3 - 2018-01-10 - 100 - 4
- 2018-01-05 - 100 - 3 - 2019-01-12 - 100 - 0
- 2018-01-10 - 100 - 4 - 2019-01-12 - 100 - 0
这样如何让每个Seller1只有最低价?
- 2018-01-01 - 100 - 0 - 2018-01-05 - 100 - 3
- 2018-01-05 - 100 - 3 - 2018-01-10 - 100 - 4
- 2018-01-10 - 100 - 4 - 2019-01-12 - 100 - 0
以同样的方式如何计算两个日期之间的总数???? 结果应该给我 (THIS) 这才是我真正要找的!!
- 2018-01-01 - 100 - 0 - 2018-01-05 - 100 - 3 (2)
- 2018-01-05 - 100 - 3 - 2018-01-10 - 100 - 4 (5)
- 2018-01-10 - 100 - 4 - 2019-01-12 - 100 - 0 (6)
现在我有了自己的界限,我想我可以找到多少:Selling = false 在我的结果之间。
有人有更好的方法来做这个查询吗?
谢谢
【问题讨论】:
-
我无法弄清楚您想要得到什么结果,如何计算最后两个表格中的列,或者一些随机日期来自哪里。
标签: sql sql-server select group-by