0

我有一张桌子,看起来像

我有表

我需要创建一个包含以下列的表

我需要的表

表格包括唯一 ID、短信数量为最大时的最小日期和短信数量为最小时的最大日期,包括两种情况的短信数量

我已经尝试了几个查询,但我觉得问题不在于通常在“sms”列中找到 min(sms),而是在“date”列中找到条件 max(date)

因此,如果我必须找到在最小数据上发送的最大短信量,我应该在数量最大时选择最小数据。现在我只能找到在 min 数据上发送的短信数量。

很高兴有任何解释

PS:我正在使用 MS SQL 2014


4

1 回答 1

0

这应该有效,或者至少是调整的起点:

SELECT * INTO Table1 FROM (VALUES
(1,'1/1/2015',10),
(1,'2/1/2015',10),
(1,'3/1/2015',20),
(1,'4/1/2015',20),
(2,'5/1/2015',30),
(2,'6/1/2015',30),
(2,'7/1/2015',40),
(2,'8/1/2015',40)
) as x ([User_ID], [Date], [SMS])
GO
;WITH MX as (
    SELECT t1.[User_ID], MIN(t1.[Date]) as [Date], t1.[SMS]
    FROM Table1 as t1
    WHERE t1.[SMS] = (SELECT MAX(i.[SMS]) as [SMS] FROM Table1 as i WHERE i.[User_ID] = t1.[User_ID] ) 
    GROUP BY t1.[User_ID], t1.[SMS]
), MI as (
    SELECT t1.[User_ID], MAX(t1.[Date]) as [Date], t1.[SMS]
    FROM Table1 as t1
    WHERE t1.[SMS] = (SELECT MIN(i.[SMS]) as [SMS] FROM Table1 as i WHERE i.[User_ID] = t1.[User_ID] ) 
    GROUP BY t1.[User_ID], t1.[SMS]
)
SELECT MX.[User_ID], MX.[Date] as Min_Date, MX.[SMS] as Max_SMS, MI.[Date] as Max_Date, MI.[SMS] as Min_SMS
FROM MX INNER JOIN MI ON MX.[User_ID] = MI.[User_ID];
GO
于 2016-08-09T02:22:34.950 回答