按 Sql Server 中的一列分组并按未包含在聚合函数或 GROUP BY 子句中的另一列排序

Posted

技术标签:

【中文标题】按 Sql Server 中的一列分组并按未包含在聚合函数或 GROUP BY 子句中的另一列排序【英文标题】:Group by one Column in Sql Server and Order by Another Column not contained in either an aggregate function or the GROUP BY clause 【发布时间】:2020-09-03 11:52:43 【问题描述】:

我有两列 Keyword 和 EventDate 的表“ApplicationEventsSearch” 我想要一个查询,将结果作为不同的关键字返回,但按 EventDate 排序 我尝试了很多组合,但没有一个有效

数据

Keyword EventDate
123457  2020-09-01
123457fdfdfdfd  2020-09-01
123457fdfdfdfd  2020-09-02
123457fdfdfdfd  2020-09-03

想要的结果

1-123457fdfdfdfd,
2-123457

到目前为止我已经尝试过什么

SELECT 
       [Keyword],EventDate
  FROM [NavaarDb-Dev].[dbo].[ApplicationEventsSearch]
  group by Keyword,EventDate
 order by EventDate


SELECT 
      distinct [Keyword],EventDate
  FROM [NavaarDb-Dev].[dbo].[ApplicationEventsSearch]
  group by Keyword,EventDate
 order by EventDate

【问题讨论】:

【参考方案1】:

你不只是在ORDER BY 中关注MINMAX 吗?

SELECT Keyword
FROM dbo.YourTable
GROUP BY KeyWord
ORDER BY MAX(EventDate) ASC;

【讨论】:

【参考方案2】:

这回答了问题

数据

drop table if exists #tTEST;
go
select * INTO #tTEST from (values 
('123457', '2020-09-01'),
('123457fdfdfdfd', '2020-09-01'),
('123457fdfdfdfd', '2020-09-02'),
('123457fdfdfdfd', '2020-09-03')) V(Keyword, EventDate);

查询

;with kw_cte as (select *, row_number() over (partition by Keyword order by EventDate desc) rn from #tTEST)
select
  concat_ws('-', row_number() over (order by EventDate desc), Keyword) string
from kw_cte 
where rn=1;

结果

string
1-123457fdfdfdfd
2-123457

【讨论】:

以上是关于按 Sql Server 中的一列分组并按未包含在聚合函数或 GROUP BY 子句中的另一列排序的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 按过去 24 小时、上周和上个月对促销进行分组,并按周降序排序

Python:如何按一列分组行并按另一列选择一行?

按SQL Server中的总计百分比分组

如何按一列的最大值获取SQL行,按另一列分组

核心数据按年份分组并按日期排序

如何在 SQL 中按多列分组并按日期排序?