Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以在JPA中使用窗口函数吗?_Java_Sql Server_Jpa_Window Functions - Fatal编程技术网

Java 可以在JPA中使用窗口函数吗?

Java 可以在JPA中使用窗口函数吗?,java,sql-server,jpa,window-functions,Java,Sql Server,Jpa,Window Functions,我需要在Spring数据存储库中使用窗口函数,是吗 这可能吗 我现在使用的是JavaSpringMaven,对JPA中的实体表分区一无所知 我的SQL查询 select b.q_stop_id as q_stop_id, b.q_work_day as q_work_day, b.q_work_end as q_work_end, b.q_mc_num as q_mc_num, b.q_mc_name as q_mc_name, b.Hnbn as q_hnbn, b.q_koku as q_

我需要在Spring数据存储库中使用窗口函数,是吗 这可能吗

我现在使用的是JavaSpringMaven,对JPA中的实体表分区一无所知

我的SQL查询

select 
b.q_stop_id as q_stop_id,
b.q_work_day as q_work_day,
b.q_work_end as q_work_end,
b.q_mc_num as q_mc_num,
b.q_mc_name as q_mc_name,
b.Hnbn as q_hnbn,
b.q_koku as q_koku,
b.q_stop_st_time as q_stop_st_time,
b.q_stop_en_time as q_stop_en_time,
b.q_stop_time_s as q_stop_time_s,
b.q_stop_maj_code as q_stop_maj_code,
b.q_stop_major as q_stop_major,
b.q_stop_num as q_stop_num,
b.q_stop_minor as q_stop_minor,
b.q_pause_flag as q_pause_flag              
from        
(
select ROW_NUMBER() OVER (PARTITION BY a.rnk
ORDER BY a.q_stop_st_time,a.q_stop_en_time) AS RowNo,COUNT(*) OVER () as cnt,*          
from (
select DENSE_RANK() OVER(PARTITION BY proL.q_set_hnbn ORDER BY stL.q_stop_st_time,stL.q_stop_en_time DESC) as rnk,case when proL.q_set_hnbn  is not null and proL.q_set_hnbn !='' then proL.q_set_hnbn  else proL.q_hnbn end as Hnbn ,proL.q_set_hnbn as setHnbn, stL.q_stop_id as q_stop_id,wk.q_work_day as q_work_day,wk.q_work_end as q_work_end,mc.q_mc_num as q_mc_num,mc.q_mc_name as q_mc_name,proL.q_hnbn as q_hnbn,proL.q_koku as q_koku,stL.q_stop_st_time as q_stop_st_time,stL.q_stop_en_time as q_stop_en_time,stL.q_stop_time_s as q_stop_time_s,mst.q_stop_maj_code as q_stop_maj_code,mst.q_stop_major as q_stop_major,mst.q_stop_num as q_stop_num,mst.q_stop_minor as q_stop_minor,
mst.q_pause_flag as q_pause_flag  
from T_STOP_LOG stL inner join  M_stop_item mst on stL.q_stop_num=mst.q_stop_num 
inner join T_work_log wk on stL.q_work_id=wk.q_work_id 
inner join T_prod_log proL on wk.q_work_id =proL.q_work_id 
inner join M_mc mc on wk.q_mc_num=mc.q_mc_num 
left join T_malfunction_repair_log r on r.q_stop_id=stL.q_stop_id 
where wk.q_work_day >='2021-04-19 00:00:00.000' and 
wk.q_work_end<='2021-04-20 23:59:59.000' and mc.q_mc_num='1200' )a 
)b where b.RowNo=1 or  b.RowNo=2
    
>我通过使用JPA nativeQuery=true找到了解决方案


如果您使用的是Java13+您可以使用。。。文本块以避免所有字符串连接。
@Query(value = "select " + "b.q_stop_id as q_stop_id," + "b.q_work_day as q_work_day,"
        + "b.q_work_end as q_work_end," + "b.q_mc_num as q_mc_num," + "b.q_mc_name as q_mc_name,"
        + "b.Hnbn as q_hnbn," + "b.q_koku as q_koku," + "b.q_stop_st_time as q_stop_st_time,"
        + "b.q_stop_en_time as q_stop_en_time," + "b.q_stop_time_s as q_stop_time_s,"
        + "b.q_stop_maj_code as q_stop_maj_code," + "b.q_stop_major as q_stop_major,"
        + "b.q_stop_num as q_stop_num," + "b.q_stop_minor as q_stop_minor," + "b.q_pause_flag as q_pause_flag "
        + "from" + "(" + "select ROW_NUMBER() OVER (PARTITION BY a.rnk "
        + "ORDER BY a.q_stop_st_time,a.q_stop_en_time) AS RowNo,COUNT(*) OVER () as cnt,*   "
        + "from (select  DENSE_RANK() OVER(PARTITION BY proL.q_set_hnbn ORDER BY stL.q_stop_st_time,stL.q_stop_en_time DESC) as rnk,case when proL.q_set_hnbn  is not null and proL.q_set_hnbn !='' then proL.q_set_hnbn  else proL.q_hnbn end as Hnbn ,proL.q_set_hnbn as setHnbn,stL.q_stop_id as q_stop_id,wk.q_work_day as q_work_day,wk.q_work_end as q_work_end,mc.q_mc_num as q_mc_num,mc.q_mc_name as q_mc_name,proL.q_hnbn as q_hnbn,proL.q_koku as q_koku,stL.q_stop_st_time as q_stop_st_time,stL.q_stop_en_time as q_stop_en_time,stL.q_stop_time_s as q_stop_time_s,mst.q_stop_maj_code as q_stop_maj_code,mst.q_stop_major as q_stop_major,mst.q_stop_num as q_stop_num,mst.q_stop_minor as q_stop_minor,"
        + "mst.q_pause_flag as q_pause_flag  "
        + "from T_STOP_LOG stL inner join  M_stop_item mst on stL.q_stop_num=mst.q_stop_num "
        + "inner join T_work_log wk on stL.q_work_id=wk.q_work_id "
        + "inner join T_prod_log proL on wk.q_work_id =proL.q_work_id "
        + "inner join M_mc mc on wk.q_mc_num=mc.q_mc_num "
        + "left join T_malfunction_repair_log r on r.q_stop_id=stL.q_stop_id "
        + "where wk.q_work_day >=:workDay and wk.q_work_end<=:workEnd and mc.q_mc_num=:kiban)a "
        + ")b where b.RowNo=1 or  b.RowNo=2", nativeQuery = true)