Oracle 和SQL server都有ROW_NUMBER() OVER这个功能函数,主要用于分组排序,而MySQL 却没有

  1. SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY H.ALARMINDEX ORDER BY H.HANDLETIME DESC) N,
  2. H.* FROM M_ALARMHANDLE H) M
  3. 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语句为

  1. select HANDLELSH,ALARMINDEX,HANDLESTATUS,HANDLETIME,HANDLEPERSON,HANDLEDESCRIPTION,HANDLETYPE,rank from
  2. (
  3. select H.*,@rownum:=@rownum+1 ,
  4. if(@Group=H.ALARMINDEX,@rank:=@rank+1,@rank:=1) as rank,
  5. @Group:=H.ALARMINDEX
  6. from (
  7. select * from M_ALARMHANDLE order by HANDLETIME DESC
  8. ) H ,(select @rownum :=0 , @Group := null ,@rank:=0) a ) result where rank=1;

对应的LINQ语句为

  1. var M_ALARMHANDLEList = (from HA in dbManager.M_ALARMHANDLE
  2. group HA by HA.ALARMINDEX into HH
  3. from MH in HH
  4. orderby MH.HANDLETIME descending
  5. select new
  6. {
  7. RowNo = RowNo+1,
  8. MH.HANDLELSH,
  9. MH.HANDLEDESCRIPTION,
  10. MH.HANDLEPERSON,
  11. MH.HANDLESTATUS,
  12. MH.HANDLETIME,
  13. MH.HANDLETYPE,
  14. MH.ALARMINDEX
  15. }).Where(m=>m.RowNo==1);

  

测试功能举例(摘自他人但已经测过)

  1. drop table if exists Wmy;
  2. create table Wmy (id int ,GroupId int ,salary decimal(,) );
  3. insert into Wmy values
  4. (,,5500.00),
  5. (,,4500.00),
  6. (,,1900.00),
  7. (,,4800.00),
  8. (,,6500.00),
  9. (,,14500.00),
  10. (,,44500.00),
  11. (,,6500.00),
  12. (,,7500.00);
  13. select id,GroupId,salary,rank from
  14. (
  15. select H.id,H.GroupId,H.salary,@rownum:=@rownum+ ,
  16. if(@Group=H.GroupId,@rank:=@rank+,@rank:=) as rank,
  17. @Group:=H.GroupId
  18. from (
  19. select id,GroupId,salary from Wmy order by GroupId asc ,salary desc
  20. ) 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的更多相关文章

  1. SQL、Linq、lamda表达式 同一功能不同写法

    一.SQL.Linq.lamda表达式 同一功能不同写法 SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employe ...

  2. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...

  3. SQL、LINQ、Lambda 三种用法(转)

    SQL.LINQ.Lambda 三种用法颜色注释: SQL LinqToSql Lambda QA1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname, ...

  4. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  5. sql转Linq的工具

    本文转载:http://www.cnblogs.com/huangxincheng/archive/2011/05/12/2044990.html 介绍一个小工具 Linqer   这些天写Linq挺 ...

  6. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  7. 从sql走向linq的我撞死在起点上

    [本文纯个人理解,错误轻喷,非常希望能有大神指点] A left (outer) join B on A.bid=B.id 上面这句话叫做左连接,原因是left(左)join(加入,连入)被译为左连接 ...

  8. 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)

    原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...

  9. 在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算)

    原文:在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

随机推荐

  1. Zipper

      Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. Redis 实践笔记

    本文来自:http://www.cnblogs.com/me-sa/archive/2012/03/13/redis-in-action.html 最近在项目中实践了一下Redis,过程中遇到并解决了 ...

  3. 实用CSS3属性之 :target伪类实现Tab切换效果

    CSS3 :target伪类用来改变页面中锚链接URL所指向的ID样式,例如你要改变描链接指向#tab的元素字体颜色为蓝色,哪么你可以这样写成#tab:target {color:blue} 浏览器支 ...

  4. SpringMVC中采用简洁的配置实现文件上传

    文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服务端处理会略有差别,个人感觉IO上传代码简单,但是也有很多硬伤,还是表单上传更合 ...

  5. 初学DIV+CSS要记住的

    初学DIV+CSS?有六个问题需要您关注一下!作为DIV+CSS初学者,如果在动手写代码之前对网页整体结构由一个清晰认识的话,写起来会事半功倍!但是,写的过程中总是有这样那样的问题,使得我们不得不停下 ...

  6. Git教程--Git安装和版本库的创建

    Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热 ...

  7. 数独破解c++代码

    数独破解c++代码 #include <iostream> #include <cstring> #include <cstdio> #include <st ...

  8. 【转】基于RSA算法实现软件注册码原理初讨

    1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...

  9. Windows 打开防火墙上的指定端口

    第一步: 控制面板-->打开防火墙 第二步: 高级设置 第三步: 入站规则--->新建规则 第四步: 第五步: 第六步: 第七步: 第八步:

  10. HCE:Host-based Card Emulation基于Android设备的卡片模拟器

    HCE技术支持提供了一个软实现SE的通路,Service实现的方式很多,可以使用文件,使用网络,甚至连接真正的SE.支持HCE的测试手机:目前可以确定使用了NXP PN547作为CLF的NFC手机已经 ...