SQL如何从另一个select链接最低的行

SQL如何从另一个select链接最低的行,sql,sql-server,select,group-by,Sql,Sql Server,Select,Group By,我从一个星期以来一直在寻找这个问题。我尝试了许多代码,但无法得到正确答案,问题是: 我有一个卖家表,每次客户联系这个卖家时,如果他卖了什么或没有 表卖方我将把一个卖方的数据只给你一个更具体的问题 SellerID-phonecalldate-Sequence-Selling Bool 100 - 2018-01-05 - 1 - 0 100 - 2018-01-05 - 2 - 0 100 - 20

我从一个星期以来一直在寻找这个问题。我尝试了许多代码,但无法得到正确答案,问题是: 我有一个卖家表,每次客户联系这个卖家时,如果他卖了什么或没有

表卖方我将把一个卖方的数据只给你一个更具体的问题

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 如何像这样为每个卖家提供最低的价格

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 同样,如何计算两个日期之间的总数???? 结果应该是这样的 这才是我真正想要的

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 在我的结果之间

是否有人有更好的方法执行此查询以获取此信息


谢谢

我希望这部分由问题的作者完成

DECLARE @Seller TABLE (
  SellerID INT,
  phonecalldate DATE,
  [Sequence] INT,
  Selling INT CHECK(Selling IN(0, 1)),
  PRIMARY KEY (SellerID, phonecalldate, [Sequence])
);

INSERT @Seller(SellerID, phonecalldate, [Sequence], Selling)
VALUES
  (100, '20180105', 1, 0),
  (100, '20180105', 2, 0),
  (100, '20180105', 3, 1),
  (100, '20180105', 4, 0),
  (100, '20180105', 5, 0),
  (100, '20180110', 1, 0),
  (100, '20180110', 2, 0),
  (100, '20180110', 3, 0),
  (100, '20180110', 4, 1),
  (100, '20180110', 5, 0),
  (100, '20180110', 6, 0),
  (100, '20180110', 7, 0),
  (100, '20180110', 8, 0),
  (100, '20180110', 9, 0),
  (100, '20180110', 10, 0);
可以使用以下查询获得获得所需结果所需的数据:

WITH
  a AS (
    SELECT
      SellerID,
      Selling,
      FORMAT(phonecalldate, 'yyyyMMdd') +
        FORMAT([Sequence], '00000000') AS dump,
      SUM(Selling) OVER
      (
        PARTITION BY SellerID
        ORDER BY phonecalldate, [Sequence]
      ) AS g
    FROM @Seller
  )
SELECT
  COUNT(*) AS PhoneCallQty,
  CAST(LEFT(MIN(dump), 8) AS DATE) AS StartDate,
  CAST(RIGHT(MIN(dump), 8) AS INT) AS StartSeq,
  CAST(LEFT(MAX(dump), 8) AS DATE) AS EndDate,
  CAST(RIGHT(MAX(dump), 8) AS INT) AS EndSeq
FROM a
WHERE Selling = 0
GROUP BY SellerID, g;
输出:


我不知道你想要得到什么样的结果,最后两个表中的列是如何计算的,或者一些随机日期是从哪里来的。哇,这就是我想要的。伟大的逻辑。谢谢
+--------------+------------+----------+------------+--------+
| PhoneCallQty | StartDate  | StartSeq |  EndDate   | EndSeq |
+--------------+------------+----------+------------+--------+
|            2 | 2018-01-05 |        1 | 2018-01-05 |      2 |
|            5 | 2018-01-05 |        4 | 2018-01-10 |      3 |
|            6 | 2018-01-10 |        5 | 2018-01-10 |     10 |
+--------------+------------+----------+------------+--------+