Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 Spring数据,JPQL,按日期列的年份和月份分组_Java_Mysql_Spring_Spring Mvc_Stored Procedures - Fatal编程技术网

Java Spring数据,JPQL,按日期列的年份和月份分组

Java Spring数据,JPQL,按日期列的年份和月份分组,java,mysql,spring,spring-mvc,stored-procedures,Java,Mysql,Spring,Spring Mvc,Stored Procedures,我有一个工作的原生MySQL查询,通过按年份和月份分组日期列来获取一些数据(例如:2017-01、2017-02) 有了这个,我可以得到预期的输出 现在,我花了两天的时间将这个结果输入到我的spring boot项目中。尝试了命名本机查询、存储过程和方法签名模式。但每次尝试都失败了。最后,我不得不放弃使用git客户端所做的更改 我试图实现的是按部分日期分组,将结果映射到自定义Pojo,或者在spring应用程序中获取行MySQL结果 请帮我做这件事 在JPql中是否有一种方法可以按部分日期分

我有一个工作的原生MySQL查询,通过按年份和月份分组日期列来获取一些数据(例如:2017-01、2017-02)

有了这个,我可以得到预期的输出

现在,我花了两天的时间将这个结果输入到我的spring boot项目中。尝试了命名本机查询、存储过程和方法签名模式。但每次尝试都失败了。最后,我不得不放弃使用git客户端所做的更改

我试图实现的是按部分日期分组,将结果映射到自定义Pojo,或者在spring应用程序中获取行MySQL结果

请帮我做这件事

  • 在JPql中是否有一种方法可以按部分日期分组,如“分组方式” MySQL中的日期格式(production.production\u DATE,%Y-%m'),如果是 请举个例子好吗
  • 如何从spring数据中的本机查询中获取作为列表或相关的行MySQL结果
  • 有没有关于如何将存储过程结果映射到spring数据中的自定义POJO的示例
--------------2017-06-07-------------
问题已解决
我通过在JPQL中混合使用MySQL函数DATE_格式(xxx,%Y-%m')实现了这一要求,我真的不知道如何混合这两种格式,但它是有效的。 My working spring函数和查询:

@Query(value = "SELECT "
        + " new com.trendsmixed.fma.dao.MonthlyScheduleAdherence(DATE_FORMAT(operation.production.productionDate,'%Y-%m'), SUM(operation.actualQuantity), SUM(operation.plannedQuantity), (SUM(operation.actualQuantity)/SUM(operation.plannedQuantity))*100) "
        + " FROM Operation operation" 
        + " WHERE operation.production.productionDate BETWEEN :startDate AND :endDate"
        + " AND operation.production.controlPoint.workCenter.costCenter.section= :section"
        + " GROUP BY DATE_FORMAT(operation.production.productionDate,'%Y-%m')")
public List getMonthlyScheduleAdherenceBySection(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("section") Section section);
要映射结果的POJO:

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class MonthlyScheduleAdherence {

    String month;
    long actualTotal;
    long plannedTotal;
    long adherence;

}
由此我得到:

[
    {
        month: "2017-02",
        actualTotal: 8640,
        plannedTotal: 10664,
        adherence: 81
    },
    {
        month: "2017-03",
        actualTotal: 8907,
        plannedTotal: 10352,
        adherence: 86
    },
    {
        month: "2017-04",
        actualTotal: 3224,
        plannedTotal: 4164,
        adherence: 77
    },
    {
        month: "2017-05",
        actualTotal: 8545,
        plannedTotal: 12435,
        adherence: 68
    }
]
这就是我想要的。 我用这些数据成功地做到了这一点。


谢谢

Sql函数在JPQL中可用。我的JPA版本是1.11.9。你的日期格式函数对我不起作用。我对分组按天使用函数查询:

@Query(value = "SELECT count(ac) as count, function('date_format', max(ac.subscriptionStartDate), '%Y, %m, %d') as date FROM MyTable ac " +
        "WHERE ac.subscriptionStartDate BETWEEN :startDate AND :endDate GROUP BY function('date_format', ac.subscriptionStartDate, '%Y, %m, %d')")
public List<Map<String,Object>> findRegisteredCustomersHistory(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
JPQL中的简单函数查询:

@Query(value = "SELECT function('date_format', s.date, '%Y, %m, %d') as date from Transactions s;")
count: 3, date: 2019, 09, 10
count: 1, date: 2019, 09, 11
@Query(value = "SELECT function('date_format', s.date, '%Y, %m, %d') as date from Transactions s;")