选择查询需要显示除具有特定条件的列的第一条记录之外的所有记录
当前数据:
ID Type Name
123 0 Sathiya
123 1 Kumar
123 NULL Mohan
123 6 Ranjith
124 0 Sathiya
123 0 John
125 6 Albert
123 0 Sathiya
124 0 Kumar
124 0 Joseph
预期数据:
ID Type Name
123 0 Sathiya
123 1 Kumar
123 NULL Mohan
123 6 Ranjith
124 0 Sathiya
125 6 Albert
使用的查询:
SELECT
ROW_NUMBER() PARTITION BY ID,Type ORDER BY StartTime ASC AS RN,
*
INTO #temp1
FROM TABLE
SELECT
*
FROM #temp1
WHERE RN>1
但是这个查询将不足以提供所需的数据,因为RN将针对所有类型被划分,但是我需要仅针对相同CallID的类型0获得RN。除了相同CallID的第一类型=0之外,在最终选择中需要忽略相同CallID的类型=0的重置。
任何线索或想法都非常感谢。
2条答案
按热度按时间xtupzzrd1#
当发现重复的〈Id,Type,Name〉时,可以计算一个递增的运行总和,然后可以选择第一个分区
TOP 1 WITH TIES
。检查here演示。
注意:我猜“StartTime”是和日期时间类型相关的。为了简单起见,在小提琴上显示为整数,应该也可以和日期时间一起使用。
7gs2gvoe2#
所以我没有想到用直接方法来做,所以我遵循了
Union
。选择Type!=0的第一组数据和Type=0的第二组数据,
ROW_NUMBER() OVER(PARTITION BY Name, Type, ID ORDER BY StartTime)
仅为Type 0提供1、2、3。然后输入RN=1
,得到预期结果。