我有一张桌子,看起来像
我需要创建一个包含以下列的表
表格包括唯一 ID、短信数量为最大时的最小日期和短信数量为最小时的最大日期,包括两种情况的短信数量
我已经尝试了几个查询,但我觉得问题不在于通常在“sms”列中找到 min(sms),而是在“date”列中找到条件 max(date)
因此,如果我必须找到在最小数据上发送的最大短信量,我应该在数量最大时选择最小数据。现在我只能找到在 min 数据上发送的短信数量。
很高兴有任何解释
PS:我正在使用 MS SQL 2014
我有一张桌子,看起来像
我需要创建一个包含以下列的表
表格包括唯一 ID、短信数量为最大时的最小日期和短信数量为最小时的最大日期,包括两种情况的短信数量
我已经尝试了几个查询,但我觉得问题不在于通常在“sms”列中找到 min(sms),而是在“date”列中找到条件 max(date)
因此,如果我必须找到在最小数据上发送的最大短信量,我应该在数量最大时选择最小数据。现在我只能找到在 min 数据上发送的短信数量。
很高兴有任何解释
PS:我正在使用 MS SQL 2014
这应该有效,或者至少是调整的起点:
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