• 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(10,2) );
    insert into Wmy values
    (1,10,5500.00),
    (2,10,4500.00),
    (3,20,1900.00),
    (4,20,4800.00),
    (5,40,6500.00),
    (6,40,14500.00),
    (7,40,44500.00),
    (8,50,6500.00),
    (9,50,7500.00);
    select id,GroupId,salary,rank from 
    (
     select H.id,H.GroupId,H.salary,@rownum:=@rownum+1 ,
     if(@Group=H.GroupId,@rank:=@rank+1,@rank:=1) as rank,
     @Group:=H.GroupId
     from (
     select id,GroupId,salary from Wmy order by GroupId asc ,salary desc
     ) H ,(select @rownum :=0 , @Group := null ,@rank:=0) a ) result;

     错误1,以上语句在MySQL WorKBench中可以正常执行但是在C#中可能报错Fatal error encountered during command execution

    此时,只要在连接数据库字符串中加入Allow User Variables=True即可解决

     

  • 相关阅读:
    undefined reference to cv::imread(cv::String const&, int)
    ubuntu gcc 降级 适应matlab
    ubuntu 迅雷 XwareDesktop
    python 包 安装 加速 pip anaconda
    ubuntu classicmenu-indicator
    ubuntu 电源管理
    apue.h头文件(UNIX环境高级编程)
    ubuntu 12.04 下nginx安装步骤
    Ubuntu12.04 64bit 下安装VNC server
    TLD视觉跟踪算法
  • 原文地址:https://www.cnblogs.com/wangboke/p/5669277.html
Copyright © 2020-2023  润新知