SQLite等效查询给定的MSSQL查询。

时间:2013-08-27 17:48:34

标签: sql sql-server sqlite database-partitioning row-number

我一直试图找到一种方法来使用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

1 个答案:

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

sql fiddle demo

我很幸运,我经常不在SQLite中工作:)