【问题标题】:SQL query min(date) from one column and max(amount) from anotherSQL 查询一列的 min(date) 和另一列的 max(amount)
【发布时间】:2016-08-08 20:15:17
【问题描述】:

我有一张桌子,看起来像

Table I have

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

Table I need

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

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

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

很高兴得到任何解释

P.S.:我使用的是 MS SQL 2014


【问题讨论】:

  • 这是一个很好的起点。 spaghettidba.com/2015/04/24/… 你应该决定使用哪个 DBMS。 mysql sql 服务器。
  • stackoverflow.com/users/3813116/sean-lange 谢谢!应用创建的表格无法粘贴到此处。上传的截图
  • 在没有一些数据结构和更清晰地了解您实际寻找的内容的情况下,尝试理解您正在寻找的内容非常容易。将图像弹出到新标签中并没有像只输入数据那样有帮助。
  • 这根本没有任何意义。这些价值观从何而来?对于用户 ID 1,2010 年 8 月 10 日来自哪里?它不在数据中。我不能代表其他所有人,但我在 sql server 上相当不错。但是,作为读心者,我真的很糟糕。
  • @SeanLange 有一个数据模型,看起来像 create table dbo.statistics ( login varchar(64) , send_date datetime , sms_cnt int ) 我举了一个数据示例以及它的外观跨度>

标签: sql-server date aggregate-functions sqldatetime


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 2014-09-06
    • 2022-11-10
    • 2011-10-12
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多