我有一个关于Microsoft SQL Server 2005的问题.如何从具有特定行号的表中删除或选择行?
当需要在网站上完成分页时...哪种方法表现更好?
分析函数 - ROW_NUMBER()
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
SELECT columnA,
columnB
FROM (SELECT columnA,
columnB,
row_number() over (order by columnB) rn
FROM table)
WHERE rn BETWEEN LOW_LIMIT AND OFFSET;
Run Code Online (Sandbox Code Playgroud)ROWNUM
INMHO我发现这种方法更易于人工阅读
SELECT * FROM (
SELECT rownum rn, a.*
FROM(
SELECT columnA, columnB
FROM table
ORDER BY columnB
) a
WHERE rn <= OFFSET
)
WHERE rnum >= LOW_LIMIT
Run Code Online (Sandbox Code Playgroud)
注意:我知道有RANK和DENSE_RANK分析函数,但我们假设我只需要通过确定性查询页面.
注意2:使用单独的简单查询计数(*)检索我正在考虑的记录总量
我正在使用这个SQL语句:
SELECT "dateId", "userId", "Salary"
FROM (
SELECT *,
(row_number() OVER (ORDER BY "userId", "dateId"))%2 AS rn
FROM user_table
) sa
WHERE sa.rn=1
AND "userId" = 789
AND "Salary" > 0;
Run Code Online (Sandbox Code Playgroud)
但是每次表获取新行时,查询的结果都不同.
我错过了什么吗?
我使用ROW_NUMBER()函数从数据库表中获取50个50项.
@From参数是从中开始抓取50行的行.(第一次为1的是51101151等)
我传递参数@CityId到存储过程,如果第一行60中的数据库是cityId=1与cityId = 2是在排61这个存储过程不返回结果.
但是,如果我通过@From参数51而不是返回结果.我在这里做错了什么?
SELECT RowConstrainedResult.*
FROM ( SELECT ROW_NUMBER() OVER
( ORDER BY f.ItemCreatedOnDate DESC ) AS RowNum,
f.*
FROM (
SELECT
t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items as t
) f) AS RowConstrainedResult
WHERE RowNum >= @From
AND RowNum < @From + 50
AND CityId = @CityId
Run Code Online (Sandbox Code Playgroud) 我有这样的表与字符串数据:
id | string_data
1 | red;green;blue
2 | orange
3 | purple;cyan
Run Code Online (Sandbox Code Playgroud)
我需要将字符串数据拆分为具有行号的项目:
id | num | item
1 | 1 | red
1 | 2 | green
1 | 3 | blue
2 | 1 | orange
3 | 1 | purple
3 | 2 | cyan
Run Code Online (Sandbox Code Playgroud)
我知道regexp_split_to_table(),但是将它与row_number()结合使用存在问题。有人知道如何解决这个问题吗?谢谢!
我正在尝试ROW_NUMBER()使用下面的结果集确定如何将函数与 TERADATA 一起使用。这是我尝试过的:
select col1, col2, ROW_NUMBER() OVER (ORDER by col2 )
FROM
(select col1, col2
from TABLE
ORDER BY col2) A
Run Code Online (Sandbox Code Playgroud)
结果集
38 11/14/2016 1
38 11/15/2016 2
38 11/16/2016 3
38 11/17/2016 4
38 11/18/2016 5
38 11/19/2016 6
39 11/20/2016 7
39 11/21/2016 8
39 11/22/2016 9
39 11/23/2016 10
39 11/24/2016 11
39 11/25/2016 12
Run Code Online (Sandbox Code Playgroud)
预期的:
Col1 Col2 Col3
38 11/14/2016 1
38 11/15/2016 1
38 11/16/2016 1
38 11/17/2016 1
38 11/18/2016 1 …Run Code Online (Sandbox Code Playgroud) 我需要构建一个查询以按成员和到期日期检索信息组,但我需要为每个成员提供一个序列号..
例如:
如果成员“A”有 3 条记录要过期,“B”只有 1 条记录,“C”有 2 条记录,我需要这样的结果:
号码会员有效期 1 A 01/01/2020 2 A 02/01/2020 3 A 03/01/2020 1 乙 01/01/2020 1 C 01/01/2020 2 C 02/01/2020
我现在的查询是:
SELECT ROW_NUMBER() OVER(ORDER BY TRUNC(EXPIRATION_DT) ASC) AS SEQUENCE, MEMBER_ID AS MEMBER, SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) AS POINTS, trunc(EXPIRATION_DT) AS EXPDATE
FROM TABLE1
WHERE EXPIRATION_DT > SYSDATE AND EXPIRATION_DT < SYSDATE + 90
GROUP BY MEMBER_ID, TRUNC(EXPIRATION_DT)
HAVING SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) > 0
ORDER BY 4 ASC;
Run Code Online (Sandbox Code Playgroud)
但我不能“分组”序列号......现在的结果是:
序列记忆点日期 1 1-O 188 2018-03-01 …
我正在使用Bigquery,因此我需要使用ROW_NUMBER()才能仅获取符合某些条件的第一行。
例:
select *except(rn)
from (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY id order by timedate desc) AS rn
FROM
table
)
where rn = 1
Run Code Online (Sandbox Code Playgroud)
但是,查询将失败,因为表太大。如何在不耗尽资源的情况下应用此类逻辑?
我有以下查询:
let p1 = pageViews | where url has "xxx";
p1
| join kind=inner (pageViews
| where url !has "xxx")
on session_Id
| project timestamp1, session_Id1, url1, client_CountryOrRegion1, client_StateOrProvince1, client_City1, user_Id1
Run Code Online (Sandbox Code Playgroud)
它确实获取来自某个提供商的用户,然后查看他们将访问哪些 URL。
我现在正在尝试了解我从该提供商那里获得了多少用户。
我可以这样做distinct session_Id,count但我想做的是添加两列,第一列用于特定的 session_id,然后在它更改时增加它,另一列用于增加发出的请求数。
IE
我试过:
let p1 = pageViews | where url has "project-management";
p1
| join kind=inner (pageViews
| where url !has "project-management")
on session_Id
| project timestamp1, session_Id1, url1, client_CountryOrRegion1, client_StateOrProvince1, client_City1, user_Id1
| extend Rank=row_number(1)
Run Code Online (Sandbox Code Playgroud)
但它给了我
无法在当前上下文中调用函数“row_number”。详细信息:行集必须序列化
为什么我们应该在这个t-sql术语中使用"order by"替换短语:
row_number() over(order by column name)
Run Code Online (Sandbox Code Playgroud) row-number ×10
sql ×5
oracle ×2
postgresql ×2
sql-server ×2
t-sql ×2
database ×1
date ×1
group-by ×1
kql ×1
pagination ×1
paging ×1
rownum ×1
select ×1
split ×1
sql-order-by ×1
teradata ×1