给定一个ICriteria对象形式的查询,我想使用NHibernate(通过投影?)来查找元素的顺序,其方式与使用相同
SELECT ROW_NUMBER() OVER (...)
Run Code Online (Sandbox Code Playgroud)
在查询中查找特定项目的索引.(我需要这个用于分页中的"跳转页面"功能)任何建议?
注意:我不想去一个页面给出它的数字 - 我知道该怎么做 - 我想得到项目的INDEX所以我可以按页面大小划分它并获得页面索引.
是否可以向GROUP BY添加标识列,以便每个副本都有一个标识号?
我的原始数据如下所示:
1 AAA [timestamp]
2 AAA [timestamp]
3 BBB [timestamp]
4 CCC [timestamp]
5 CCC [timestamp]
6 CCC [timestamp]
7 DDD [timestamp]
8 DDD [timestamp]
9 EEE [timestamp]
....
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
1 AAA 1
2 AAA 2
4 CCC 1
5 CCC 2
6 CCC 3
7 DDD 1
8 DDD 2
...
Run Code Online (Sandbox Code Playgroud)
解决方案是:
CREATE PROCEDURE [dbo].[RankIt]
AS
BEGIN
SET NOCOUNT ON;
SELECT *, RANK() OVER(PARTITION BY col2 ORDER BY timestamp DESC) AS ranking
FROM MYTABLE;
END
Run Code Online (Sandbox Code Playgroud) 我如何设置在更改表之后添加的列的值等于sql server 2008中的行no.这就是我希望列的值等于no.排.我也希望这个字段允许NULL值.所以它就像自动增量但允许空值,这就是为什么不想使用带有自动增量的标识或主键列的原因.那怎么设置为排?任何帮助将不胜感激.
我有一个需要在列表中显示数据“页面”的应用程序。基本想法是相当普遍的。显示屏显示项目列表,显示屏底部是一些控件,可让您转到数据的下一个“页面”。
一切都很好。我有这个工作。
以下是我用来支持“下一个”行为的视图中的SQL。
CREATE VIEW CampaignParticipants AS
SELECT row_number() OVER (ORDER BY TPT.LastName, TPT.FirstName, TPT.DoB) AS RowNumber
,CGP.*
,TPT.*
FROM tblCampaignGEDPush CGP
JOIN tblParticipants TPT
ON CGP.PartID = TPT.PartID
Run Code Online (Sandbox Code Playgroud)
这是我使用VIEW的方式
SELECT *
FROM CampaignParticipants
WHERE RowNumber >= 0
AND RowNumber <= 100
Run Code Online (Sandbox Code Playgroud)
这模拟了从VIEW抓取100个结果的“第一页”。通过每组结果的页面只是桃色。
很棒。但是:
正如一些处理过此问题的人可能知道的那样,这是有缺陷的。如果我想继续搜索TPT.LastName like 'R%'并获得第一组结果,那我就注定了。
我将要开始查看,在处RowNumber = 0停止RowNumber = 100,但“ R”结果可能会超出该范围。结果:列表返回为空。
而且它变得更加棘手:用户希望能够“过滤” LastName,FirstName,DoB,Location,Phone,Zip等任何内容。
**编辑:我真的不能将过滤器放在“内部”查询中,因为它在视图中,并且过滤器可以任意更改
任何人有任何想法如何得到这个结果集有一个row_number()对过滤的结果集?
我一定做错了什么.我正在尝试使用row_number函数来只选择rownum为1的值,这样我总能得到最新的索引.但是在where子句中不识别rownum.
SELECT fs.docu_id as docID
, fs.field_3 AS ProductNo
, fs.field_4 AS [Status]
, fs.field_5 AS [Index]
,pd.[doku_nr] AS docIDshort
, ROW_NUMBER() OVER(PARTITION BY fs.field_3 ORDER BY fs.field_5 Desc) AS rownum
FROM [table1] fs
JOIN [table2] pd
ON fs.docu_id=pd.docu_id
AND fs.field_4 = 'valid'
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我是否需要创建不同的select stmt?
谢谢.
在SQL Server 2012版本11.0.5058中,我有一个这样的查询
SELECT TOP 30
row_number() OVER (ORDER BY SequentialNumber ASC) AS [row_number],
o.Oid, StopAzioni
FROM
tmpTestPerf O
INNER JOIN
Stati s on O.Stato = s.Oid
WHERE
StopAzioni = 0
Run Code Online (Sandbox Code Playgroud)
ORDER BY SequentialNumber ASC它需要400毫秒ORDER BY DESC在row_number函数中使用它只需要2 ms(这是在测试环境中,在生产中它是7000,7秒对15毫秒!)
分析执行计划,我发现两个查询都是一样的.有趣的区别是,在较慢的stopazioni = 0情况下,它适用于按条件过滤的所有行,117k行
在更快的速度,它只使用53行
tmpTestPerf查询上有一个主键,序列号列上有索引的ASC键.
如何解释?
问候.丹尼尔
这是tmpTestPerfQuery和Stati查询及其索引的脚本
CREATE TABLE [dbo].[tmpTestPerf]
(
[Oid] [uniqueidentifier] NOT NULL,
[SequentialNumber] [bigint] NOT NULL,
[Anagrafica] [uniqueidentifier] NULL,
[Stato] [uniqueidentifier] NULL,
CONSTRAINT [PK_tmpTestPerf]
PRIMARY KEY CLUSTERED ([Oid] ASC) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ROW_NUMBER子句对H2数据库中的表执行查询.这是我的查询:
SELECT ROW_NUMBER() OVER (order by data), name FROM students
Run Code Online (Sandbox Code Playgroud)
但我在H2控制台中出错:
SQL语句中的语法错误"SELECT ROW_NUMBER()OVER(按数据排序[*]),名称FROM学生"; 预期的")";
我注意到它只有在OVER子句为空时才有效,如OVER();
有任何想法吗?
我有一个SQL服务器表,我试图获取一个计算列 - MyPartition - 指示基于变量@segment的分区数.例如,如果@segment = 3,则以下输出为真.
RowID | RowName | MyPartition
------ | -----------| -------
1 | My Prod 1 | 1
2 | My Prod 2 | 1
3 | My Prod 3 | 1
4 | My Prod 4 | 2
5 | My Prod 5 | 2
6 | My Prod 6 | 2
7 | My Prod 7 | 3
8 | My Prod 8 | 3
9 | My Prod 9 | 3
10 …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我想分区排序表.有没有办法可以做到这一点?
我正在使用SQL Server 2016.
输入表:
|---------|-----------------|-----------|------------|
| prod | sortcolumn | type | value |
|---------|-----------------|-----------|------------|
| X | 1 | P | 12 |
| X | 2 | P | 23 |
| X | 3 | E | 34 |
| X | 4 | P | 45 |
| X | 5 | E | 56 |
| X | 6 | E | 67 |
| Y | 1 | P | 78 |
|---------|-----------------|-----------|------------| …Run Code Online (Sandbox Code Playgroud) 我有一个方案来获得基于Id列的结果集的零索引值.我能做到这一点ROW_NUMBER().但现在的预期行为略有变化.
对于前五个记录,只有IndexValue需要显示的内容IndexValue应该是剩余的条目NULL.
为了实现这一点,我设置了IndexValueby ROW_NUMBER(),推入一个表变量@PopulateValues,然后使用UPDATE我获得预期的结果,如下所示:
我尝试过的:
-- Actual Table in database
DECLARE @OriginalTable TABLE (Id INT IDENTITY(1, 1), [Name] VARCHAR (255));
INSERT INTO @OriginalTable ([Name]) VALUES
('Name 01'), ('Name 02'), ('Name 03'), ('Name 04'), ('Name 05'),
('Name 06'), ('Name 07'), ('Name 08'), ('Name 09'), ('Name 10'),
('Name 11'), ('Name 12'), ('Name 13'), ('Name 14'), ('Name 15');
-- Table variable for the populate …Run Code Online (Sandbox Code Playgroud) row-number ×10
sql-server ×7
t-sql ×4
sql ×3
database ×1
h2 ×1
nhibernate ×1
paging ×1
partition-by ×1
rank ×1
select ×1
sql-update ×1