【问题标题】:SQLite equivalent query of the given MSSQL query.给定 MSSQL 查询的 SQLite 等效查询。
【发布时间】:2013-08-27 17:48:33
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 中工作 :)

    【讨论】:

    • 太好了,正是我想要的 :) 非常感谢!
    • 顺便说一句,我正在尝试按降序获取结果集。我试图在 y.[TKG] 分组之后加上“order by y.id desc”,但这不起作用。你知道如何实现吗?
    • 您希望最终结果集降序排列吗?通过哪些列
    猜你喜欢
    • 2019-04-01
    • 2019-06-07
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多