我正在使用SQL Server 2014
和SSMS
来执行我的T-SQL
查询。
我有以下名为SQL
的{{1}}表(摘录):
Table1
我需要我的T-SQL查询给我以下输出:
BkgID ProfileID ArrivalDate
872 50 2018-01-03
876 50 2018-01-03
911 64 2018-02-15
924 64 2018-04-15
950 72 2018-05-04
逻辑是查询必须列出BkgID ProfileID ArrivalDate
872 50 2018-01-03
911 64 2018-02-15
924 64 2018-04-15
950 72 2018-05-04
只有ProfileID
一次的ArrivalDate
。它选择在这种情况下列出的BkgID
并不重要。
如何撰写此类查询?
答案 0 :(得分:1)
您可以使用tree4 = TN(2)
tree3 = TN(3, left = None, right = tree4)
tree2 = TN(2)
tree1 = TN(1, left = tree2, right = tree3)
print(max_depth(tree1, 2))
窗口功能来实现此目的。 0
将确定哪个记录在每个分区的排序中排在第一位。
ROW_NUMBER()
您也可以使用ORDER BY
并检索;WITH RankingByProfile AS
(
SELECT
T.BkgID,
T.ProfileID,
T.ArrivalDate,
Ranking = ROW_NUMBER() OVER (PARTITION BY T.ProfileID, T.ArrivalDate ORDER BY T.BkgID ASC)
FROM
Table1 AS T
)
SELECT
R.BkgID,
R.ProfileID,
R.ArrivalDate
FROM
RankingByProfile AS R
WHERE
R.Ranking = 1
,但您无法访问其他没有汇总功能的列。
GROUP BY
答案 1 :(得分:0)
您还可以使用关联方法:
select t.*
from table t
where BkgID = (select top 1 t1.BkgID
from table t1
where t1.ProfileID = t.ProfileID and t1.ArrivalDate = t.ArrivalDate
order by t1.BkgID asc
);
这假定ArrivalDate
有一些合理的date
格式,否则使用cast()
函数。