Select TOP 1 在 ex-aequo 的情况下没有 return 值
Select TOP 1 doesnt return value in case of ex-aequo
这是 link 我的数据。
我有这个查询:
SELECT *
FROM tbl c
WHERE C.dep = (select top 1 dep
from tbl cc
where cc.yea = c.yea
and cc.mon = mon
group by mon, yea, dep, n
order by n desc)
OR C.dep =( select top 1 dep
from tbl cc
where cc.yea = c.yea
and cc.mon = mon
group by mon, yea, dep, n
order by n asc
)
ORDER BY yea, mon, n
每个 (month,year)
最好的(最低的 n)和最差的(最高的 n)dep
return。此查询适用于第 1、2、4、5、7 个月,不适用于第 3、6 个月。唯一的区别是,在第 3 种和第 6 种情况下,我得到了两个分数相同的 del (1)。我怎样才能 return 其中之一,而不是什么都不 return。
这是我的输出:
n yea mon dep
----------- ----------- ----------- ----------
1 2017 1 50
48 2017 1 36
58 2017 2 36
85 2017 3 36
1 2017 4 50
39 2017 4 36
1 2017 5 50
39 2017 5 36
19 2017 6 36
3 2017 7 50
17 2017 7 36
这就是我的预期:
n yea. mon dep
----------- ----------- ----------- ----------
1 2017 1 50
48 2017 1 36
58 2017 2 36
85 2017 3 36
1 2017 3 49 (or 67)
1 2017 4 50
39 2017 4 36
1 2017 5 50
39 2017 5 36
1 2017 6 50 (or 13)
19 2017 6 36
3 2017 7 50
17 2017 7 36
使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by yea, mon order by n asc) as seqnum_asc,
row_number() over (partition by yea, mon order by n desc) as seqnum_desc
from tbl t
) t
where 1 in (seqnum_asc, seqnum_desc);
这是 link 我的数据。
我有这个查询:
SELECT *
FROM tbl c
WHERE C.dep = (select top 1 dep
from tbl cc
where cc.yea = c.yea
and cc.mon = mon
group by mon, yea, dep, n
order by n desc)
OR C.dep =( select top 1 dep
from tbl cc
where cc.yea = c.yea
and cc.mon = mon
group by mon, yea, dep, n
order by n asc
)
ORDER BY yea, mon, n
每个 (month,year)
最好的(最低的 n)和最差的(最高的 n)dep
return。此查询适用于第 1、2、4、5、7 个月,不适用于第 3、6 个月。唯一的区别是,在第 3 种和第 6 种情况下,我得到了两个分数相同的 del (1)。我怎样才能 return 其中之一,而不是什么都不 return。
这是我的输出:
n yea mon dep
----------- ----------- ----------- ----------
1 2017 1 50
48 2017 1 36
58 2017 2 36
85 2017 3 36
1 2017 4 50
39 2017 4 36
1 2017 5 50
39 2017 5 36
19 2017 6 36
3 2017 7 50
17 2017 7 36
这就是我的预期:
n yea. mon dep
----------- ----------- ----------- ----------
1 2017 1 50
48 2017 1 36
58 2017 2 36
85 2017 3 36
1 2017 3 49 (or 67)
1 2017 4 50
39 2017 4 36
1 2017 5 50
39 2017 5 36
1 2017 6 50 (or 13)
19 2017 6 36
3 2017 7 50
17 2017 7 36
使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by yea, mon order by n asc) as seqnum_asc,
row_number() over (partition by yea, mon order by n desc) as seqnum_desc
from tbl t
) t
where 1 in (seqnum_asc, seqnum_desc);