【问题标题】:SQL Query a Table grouped by some columns but taking the first row ordered by another column [duplicate]SQL查询按某些列分组的表,但取由另一列排序的第一行[重复]
【发布时间】:2022-01-09 05:40:48
【问题描述】:

下面有一个汇总表

CardNumber Name LastName LastEntrance
123 Name1 Lastname1 2021-12-01 18:00:00
123 Name2 Lastname2 2021-12-01 17:00:00
234 Name3 Lastname3 2021-12-01 10:00:00
234 Name5 Lastname5 2021-12-01 09:00:00
567 Name4 Lastname4 2021-12-01 16:00:00

我想要一个表,其中包含唯一的 CardNumberNameLastName 和最近的 LastEntrance 的分组行。我的结果表应该是:

CardNumber Name LastName LastEntrance
123 Name1 Lastname1 2021-12-01 18:00:00
234 Name3 Lastname3 2021-12-01 10:00:00
567 Name4 Lastname4 2021-12-01 16:00:00

我可以用一个简单的 SQL 查询来查询这个表吗?

【问题讨论】:

  • 发布您的查询
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 为了简单起见,我没有分享全部内容。一旦我尝试提出的解决方案,我将返回并更新问题。感谢所有答案。
  • @serkanz 如果解决方案不能 100% 应用,我会建议您提出一个新问题,首先是因为我们试图使 QA 非常具体,以便进一步供其他用户使用,其次是因为您会比已经有 3 个答案的编辑更受关注。

标签: sql sql-server tsql


【解决方案1】:

我喜欢与自身交叉的逻辑,并将每一行与另一行进行比较(如果它更大)。然后只显示交叉的。没有子查询,性能更高,更易阅读。

SELECT t1.*
FROM mytable t1
  LEFT OUTER JOIN mytable t2
    ON (t1.CardNumber = t2.CardNumber 
         AND t1.Name = t2.Name          
         AND t1.LastName = t2.LastName
         AND t1.LastEntrance < t2.LastEntrance)
WHERE t2.CardNumber IS NULL;

【讨论】:

    【解决方案2】:

    您根本不需要分组。因为你只想最近你可以做如下。通过从您的表中查询最新的 LastEntrance 并在您的主查询中使用它。

    Select t.CardNumber,t.Name,t.LastName,t.LastEntrance from tableX t
    where t.LastEntrance= (select Max(a.LastEntrance) from tableX a where a.CardNumber=t.CardNumber)
    order by t.CardNumber
    

    【讨论】:

      【解决方案3】:

      使用子查询按员工查找max(LastEntrance) 以获得所需的结果

      select * 
      from cards cards1
      where LastEntrance = (select Max(LastEntrance) 
                            from cards cards2
                            where cards1.CardNumber = cards2.CardNumber)
      

      【讨论】:

        猜你喜欢
        • 2021-12-15
        • 2017-12-05
        • 1970-01-01
        • 2019-10-17
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 2017-03-21
        相关资源
        最近更新 更多