将数据合并为 1 行
Combine data in 1 row
初始数据示例:
Project | Modified | LastModify |
---------------------------------------
Project 1 | 12.01.2018 | 3 |
Project 2 | 10.02.2017 | 2 |
Project 1 | 15.01.2018 | 2 |
Project 1 | 18.01.2018 | 1 |
Project 2 | 15.02.2017 | 1 |
我通过查询得到了这个结果:
SELECT *
, Row_number() over (partition by Project order by Modified desc ) as LastModify
FROM Table_A
我需要为第 Lastmodify = 1
列的行添加带有首次修改项目日期的列
即为每个 Project
获取 1 行,第一个修改日期和最后一个修改日期
预期结果如下:
Project | Modified | LastModify | FirstModifyDate|
----------------------------------------------------
Project 1 | 18.01.2018 | 1 | 12.01.2018 |
Project 2 | 15.02.2017 | 1 | 10.02.2017 |
我该怎么做?
如果您的 Sql 服务器版本等于或高于 2012,这将有效:
SELECT *
, Row_number() over (partition by Project order by Modified desc ) as LastModify
, First_value(Modified) over (partition by Project order by Modified asc) [FirstModifyDate]
FROM Table_A
我创建了一个与您的数据相似的 table 并应用了可能有帮助的查询。 you can refer to this image
SELECT new.project
,new.times
,new.pdate
,sec.p1date
FROM new
INNER JOIN (
SELECT child.project AS p
,child.pdate AS p1date
FROM new AS child
INNER JOIN new ON child.project = new.project
GROUP BY child.project
HAVING child.times = MAX(child.times)
) AS sec ON sec.p = new.project
WHERE new.times = 1
初始数据示例:
Project | Modified | LastModify |
---------------------------------------
Project 1 | 12.01.2018 | 3 |
Project 2 | 10.02.2017 | 2 |
Project 1 | 15.01.2018 | 2 |
Project 1 | 18.01.2018 | 1 |
Project 2 | 15.02.2017 | 1 |
我通过查询得到了这个结果:
SELECT *
, Row_number() over (partition by Project order by Modified desc ) as LastModify
FROM Table_A
我需要为第 Lastmodify = 1
即为每个 Project
获取 1 行,第一个修改日期和最后一个修改日期
预期结果如下:
Project | Modified | LastModify | FirstModifyDate|
----------------------------------------------------
Project 1 | 18.01.2018 | 1 | 12.01.2018 |
Project 2 | 15.02.2017 | 1 | 10.02.2017 |
我该怎么做?
如果您的 Sql 服务器版本等于或高于 2012,这将有效:
SELECT *
, Row_number() over (partition by Project order by Modified desc ) as LastModify
, First_value(Modified) over (partition by Project order by Modified asc) [FirstModifyDate]
FROM Table_A
我创建了一个与您的数据相似的 table 并应用了可能有帮助的查询。 you can refer to this image
SELECT new.project
,new.times
,new.pdate
,sec.p1date
FROM new
INNER JOIN (
SELECT child.project AS p
,child.pdate AS p1date
FROM new AS child
INNER JOIN new ON child.project = new.project
GROUP BY child.project
HAVING child.times = MAX(child.times)
) AS sec ON sec.p = new.project
WHERE new.times = 1