1

我一直在尝试找到一种方法来使用 row_number over partition by,但在 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

我需要使用最大 CAP 通过 TKG 订购,因此输出将如下所示:

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
4

1 回答 1

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]
    )

sql fiddle demo

认为自己很幸运,我不经常在 SQLite 中工作 :)

于 2013-08-27T19:01:16.107 回答