如何根据此特定条件选择记录?

时间:2018-05-22 06:25:37

标签: sql sql-server tsql

我正在使用SQL Server 2014SSMS来执行我的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并不重要。

如何撰写此类查询?

2 个答案:

答案 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()函数。