我一直试图找到一种方法来使用row_number而不是分区依据,但是在SQLite中找不到如何这样做。 我正在尝试将以下 工作查询从MSSQL语法转换为SQLite:
select TKG, hour, CAP, switch, Calls
from
(
select *,
row_number() over(partition by TKG order by cap desc) rn
from yourtable
) t1
where rn = 1
以下是SQLFiddle的一个示例:http://sqlfiddle.com/#!3/7bf9a/3
基本上,我有下表:
TKG hour CAP SWITCH CALLS
AAA 7 45 HH 56
AAA 8 35 HH 76
AAA 9 25 HH 43
BBB 7 32 LL 5
BBB 8 43 LL 65
BBB 9 434 LL 65
CCC 7 54 JJ 43
CCC 8 564 JJ 43
CCC 9 54 JJ 65
ddd 7 10 MM 4
ddd 8 10 MM 3
ddd 9 10 MM 5
我需要TKG订购最大CAP,所以输出看起来像这样:
TKG hour CAP SWITCH CALLS
AAA 7 45 HH 56
BBB 9 434 LL 65
CCC 8 564 JJ 43
ddd 7 10 MM 4
答案 0 :(得分:1)
在不知道唯一键的情况下,以可读的方式进行操作非常困难(没有cross apply
,没有窗口函数)。如果您能够将ID添加到表中,您可以执行以下操作:
select *
from yourtable
where
id in (
select min(y.id)
from yourtable as y
inner join (
select [TKG], max([CAP]) as [CAP]
from yourtable
group by [TKG]
) as y2 on y2.[TKG] = y.[TKG] and y2.[CAP] = y.[CAP]
group by y.[TKG]
)
我很幸运,我经常不在SQLite中工作:)