sql - 选择与 MAX 列值对应的列值

标签 sql sql-server t-sql

我有一个表 Person,日期采用 yyyymmDD 格式,时间采用 hhmmssSSS 格式

ID    NAME      CREATEDDATE     CREATEDTIME
1      A          20170205       135744300
2      B          20160205       113514368
3      C          20090205       163054942
4      A          20150205       135744301

现在我想在单个查询中获取每个人的计数以及最大创建日期和相应的创建时间

我试过了

SELECT NAME, COUNT (ID) AS COUNT, MAX(CREATEDDATE), MAX(CREATEDTIME)
FROM Person

但这给了我每列的最大日期和最大时间,它没有给我对应于 MAX(CREATEDDATE) 的 CREATEDTIME

例如

查询结果为

NAME   COUNT    MAXCREATEDDATE       CORRESPONDINGCREATEDTIME

A        2        20170205             135744301

CORRESPONDINGCREATEDTIME 应为 135744300

请帮我做一下

最佳答案

您可以简单地使用子查询来完成此操作,该子查询查找每个名称的最大日期并执行内部联接。

测试数据

CREATE TABLE #Person (ID int, Name varchar(1), CreatedDate int, CreatedTime int)
INSERT INTO #Person (ID, Name, CreatedDate, CreatedTime)
VALUES
 (1,'A',20170205,135744300)
,(2,'B',20160205,113514368)
,(3,'C',20090205,163054942)
,(4,'A',20150205,135744301)

查询

SELECT
a.Name
,b.CtName CountName
,a.CreatedDate
,a.CreatedTime
FROM #Person a
JOIN    (
            SELECT 
            Name
            ,COUNT(Name) CtName
            ,MAX(CreatedDate) MaxDate 
            FROM #Person 
            GROUP BY Name
        ) b
ON a.Name = b.Name
AND a.CreatedDate = b.MaxDate

结果

Name    CountName   CreatedDate CreatedTime
A       2           20170205    135744300
B       1           20160205    113514368
C       1           20090205    163054942

关于sql - 选择与 MAX 列值对应的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009707/

相关文章:

SQL:动态 View ,其列名称基于源表中的列值

sql - 如何在运行 sql server 之前先测试您的查询

sql - 月粮改为日粮

SQL Server 设置多个变量

mysql - 通过触发器将表记录归档到另一个表(将每日表记录移动到每周表,每天)

php - 在一个查询中删除而不是使用循环和 ifs

sql - 所有数据的总和不同于各个数据集的总和

mysql - 如何获取每行(mysql)的单独列中所有列(数量大)的总和?

MySQL 日期范围多列计数和 Group By Select 语句

sql-server - 我怎样才能得到我想要的结果? SQL Server 2005