My SQL和LINQ 实现ROW_NUMBER() OVER以及Fatal error encountered during command execution
Oracle 和SQL server都有ROW_NUMBER() OVER这个功能函数,主要用于分组排序,而MySQL 却没有
SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY H.ALARMINDEX ORDER BY H.HANDLETIME DESC) N,
H.* FROM M_ALARMHANDLE H) M
WHERE M.N=1
SELECT ROW_NUMBER() OVER (PARTITION BY H.ALARMINDEX ORDER BY H.HANDLETIME DESC) N, H.* FROM M_ALARMHANDLE H,这个语句就是用于分组 排序的语句,后面的where M.N=1是取得分组排序后组中第一行,
对应的My SQL语句为
select HANDLELSH,ALARMINDEX,HANDLESTATUS,HANDLETIME,HANDLEPERSON,HANDLEDESCRIPTION,HANDLETYPE,rank from
(
select H.*,@rownum:=@rownum+1 ,
if(@Group=H.ALARMINDEX,@rank:=@rank+1,@rank:=1) as rank,
@Group:=H.ALARMINDEX
from (
select * from M_ALARMHANDLE order by HANDLETIME DESC
) H ,(select @rownum :=0 , @Group := null ,@rank:=0) a ) result where rank=1;
对应的LINQ语句为
var M_ALARMHANDLEList = (from HA in dbManager.M_ALARMHANDLE
group HA by HA.ALARMINDEX into HH
from MH in HH
orderby MH.HANDLETIME descending
select new
{
RowNo = RowNo+1,
MH.HANDLELSH,
MH.HANDLEDESCRIPTION,
MH.HANDLEPERSON,
MH.HANDLESTATUS,
MH.HANDLETIME,
MH.HANDLETYPE,
MH.ALARMINDEX
}).Where(m=>m.RowNo==1);
测试功能举例(摘自他人但已经测过)
drop table if exists Wmy;
create table Wmy (id int ,GroupId int ,salary decimal(,) );
insert into Wmy values
(,,5500.00),
(,,4500.00),
(,,1900.00),
(,,4800.00),
(,,6500.00),
(,,14500.00),
(,,44500.00),
(,,6500.00),
(,,7500.00);
select id,GroupId,salary,rank from
(
select H.id,H.GroupId,H.salary,@rownum:=@rownum+ ,
if(@Group=H.GroupId,@rank:=@rank+,@rank:=) as rank,
@Group:=H.GroupId
from (
select id,GroupId,salary from Wmy order by GroupId asc ,salary desc
) H ,(select @rownum := , @Group := null ,@rank:=) a ) result;
错误1,以上语句在MySQL WorKBench中可以正常执行但是在C#中可能报错Fatal error encountered during command execution
此时,只要在连接数据库字符串中加入Allow User Variables=True即可解决
My SQL和LINQ 实现ROW_NUMBER() OVER以及Fatal error encountered during command execution的更多相关文章
- SQL、Linq、lamda表达式 同一功能不同写法
一.SQL.Linq.lamda表达式 同一功能不同写法 SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employe ...
- SQL Server排序函数row_number和rank的区别
SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...
- SQL、LINQ、Lambda 三种用法(转)
SQL.LINQ.Lambda 三种用法颜色注释: SQL LinqToSql Lambda QA1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname, ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- sql转Linq的工具
本文转载:http://www.cnblogs.com/huangxincheng/archive/2011/05/12/2044990.html 介绍一个小工具 Linqer 这些天写Linq挺 ...
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...
- 从sql走向linq的我撞死在起点上
[本文纯个人理解,错误轻喷,非常希望能有大神指点] A left (outer) join B on A.bid=B.id 上面这句话叫做左连接,原因是left(左)join(加入,连入)被译为左连接 ...
- 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)
原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...
- 在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算)
原文:在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- 基于Andoird 4.2.2的同步框架源代码学习——同步提供端
Android同步框架 同步(synchronization)允许用户将远程数据下载到新的设备上,同时将设备上的帐户数据上传到远端.同步还保证用户能够看到最新的数据. 开发者自然可以通过自己的方式来设 ...
- leetcode_question_130 Surrounded Regions
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 移植busybox-1.21.1
busybox官网:www.busybox.net 1.解压 # tar jxvf busybox-1.21.1.tar.bz2 2.配置 # cd busybox-1.21.1 # make men ...
- 怎么在一个list集合里面筛选重复的数据,在重复的数据中取最后添加的那条数据
1.先将集合进行分组(分组字段)2.在判断分组的数量是否大于 03.大于0,则有重复的数据
- pixel像素与物理像素
- 使用 HttpWebRequest 发送模拟 POST 请求
使用HttpWebRequest发送模拟POST请求 网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果metho ...
- [Linked List]Remove Duplicates from Sorted List II
Total Accepted: 59433 Total Submissions: 230628 Difficulty: Medium Given a sorted linked list, delet ...
- (Qt 翻译) QGLAbstractScene
QGLAbstractScene Class Reference #include <QGLAbstractScene> This class was introduced in Qt3D ...
- c++的getline()和get()函数
这两个函数都是面向行的输入: getline()函数读取整行,它使用通过回车符来确定输入结尾.要调用这种方法,可以使用cin.getline().该函数有两个参数, 第一个参数用来存储输入行的数组的名 ...
- linux 删除和安装java
一.jdk1.4卸载 由于redhat Enterprise 5 中自带安装了jdk1.4的,所以在安装jdk1.6前我把jdk1.4的卸了,步骤如下: 1.打开终端输入#rpm -qa | gr ...