C# ling to sql 取多条记录最大时间

具体代码如下所述:

今天看书讲T-SQL,看到了UNBOUNDED
PRECEDING,就想比对下ROW_澳门新葡亰亚洲在线,NUMBER()的运行速度。

var _setList = (from f in _postgreDbContext.settlements group f by ( new { f.settlement_code })into g select new { deal_time = g.Max(m = m.deal_time), g.Key.settlement_code }).AsNoTracking().ToList();

sql及相关的结果如下,数据库中的数据有5W+。

知识点扩展:sql 查询相同记录下日期最大的 一条

ROW_NUMBER():SET STATISTICS TIME ONSELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn,IdFROM dbo.T_MyCourse

日期 编号 仓库 数量

运行结果

2012-05-31 C001 A店 136.002012-05-29 C001 A店 139.002012-05-29 C001 B店 5.002012-05-30 C001 B店 6.00
UNBOUNDED PRECEDINGSET STATISTICS TIME ONSELECT SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,IdFROM dbo.T_MyCourse

我只显示最大日期的记录,这个SQL怎么写呀?

运行结果

即日期 编号 仓库 数量

通过运行之后,看到结果,使用微软官方提供的方法进行编号排序,速度明显的提高。

2012-05-31 C001 A店 136.002012-05-30 C001 B店 6.00

不过我使用上述方法进行分页获取数据的时候结果又有点不一样。

SQL code

分页获取数据:

select * from tb t where not exists ( select 1 from tb where 编号 = t.编号 and 仓库 = t.仓库 and 日期  t.日期)

ROW_NUMBER() 分页获取数据:

方法2:

SET STATISTICS TIME ONSELECT *FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id FROM dbo.T_MyCourse )aWHERE a.rn BETWEEN 55 AND 444
create table cangku ( F_RQ datetime, F_BH VARCHAR(20), F_SL FLOAT )INSERT INTO cangku VALUES('2012-05-31','C001',343) INSERT INTO cangku VALUES('2012-05-30','C001',34) INSERT INTO cangku VALUES('2012-05-30','C002',33) INSERT INTO cangku VALUES('2012-05-26','C002',23)SELECT * FROM cangku T,(SELECT F_BH,MAX(F_RQ) rq FROM cangku GROUP BY F_BH) t2 where t.F_BH=t2.F_BH and t.F_RQ=t2.rq 

执行sql命令:DBCC DROPCLEANBUFFERS ,清除数据库缓存后的结果

方法3:更好理解:

UNBOUNDED分页获取数据:

select * from table a where a.date in (select max(b.date) from table b where b.id=a.id)
SET STATISTICS TIME ONSELECT *FROM ( SELECT SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id FROM dbo.T_MyCourse )aWHERE a.rn BETWEEN 22 AND 444

总结

UNBOUNDED这个方式下执行了DBCC DROPCLEANBUFFERS
清除缓存的sql也没有用,执行时间没有变化。

以上所述是小编给大家介绍的C# ling to sql
取多条记录最大时间,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

通过上述结果,看到ROW_NUMBER()获取分页的数据明显更快,我猜测是微软对ROW_NUMBER()这个方法做了优化,可能是有缓存,读取的缓存中的数据然后进行分页。

总结

以上所述是小编给大家介绍的SQL Server
分页编号的另一种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

发表评论

电子邮件地址不会被公开。 必填项已用*标注