我有一个本机查询:
@Query( value = "select to_char(o.earliest_delivery_time at time zone 'UTC', 'Mon YYYY') as month, " +
" count(o.id) as orderQuantity, " +
" sum(lp.net_qty) as gallonQuantity " +
" from orders o " +
" left join lifts l on o.id = l.order_id " +
" left join liftproducts lp on l.id = lp.lift_id " +
" where earliest_delivery_time>= :startReportDate " +
" AND o.status in :statuses" +
" AND (o.bill_to_id IN (:userCompany)" +
" OR o.carrier_id in (:userCompany) OR o.retailer_id in (:userCompany)" +
" OR o.wholesaler_id in (:userCompany) OR o.requestor_id in (:userCompany)) " +
" group by to_char(o.earliest_delivery_time at time zone 'UTC', 'Mon YYYY')", nativeQuery = true)
List<OrdersByTimeDashboardDto> getOrdersByTime(@Param("startReportDate") Instant startReportDate,
@Param("userCompany") Long userCompany,
@Param("statuses") Collection<String> statuses,
);
它工作正常,但现在我想传递时区作为参数,所以:
@Query( value = "select to_char(o.earliest_delivery_time at time zone :timezone, 'Mon YYYY') as month, " +
" count(o.id) as orderQuantity, " +
" sum(lp.net_qty) as gallonQuantity " +
" from orders o " +
" left join lifts l on o.id = l.order_id " +
" left join liftproducts lp on l.id = lp.lift_id " +
" where earliest_delivery_time>= :startReportDate " +
" AND o.status in :statuses" +
" AND (o.bill_to_id IN (:userCompany)" +
" OR o.carrier_id in (:userCompany) OR o.retailer_id in (:userCompany)" +
" OR o.wholesaler_id in (:userCompany) OR o.requestor_id in (:userCompany)) " +
" group by to_char(o.earliest_delivery_time at time zone :timezone, 'Mon YYYY')", nativeQuery = true)
List<OrdersByTimeDashboardDto> getOrdersByTime(@Param("startReportDate") Instant startReportDate,
@Param("userCompany") Long userCompany,
@Param("statuses") Collection<String> statuses,
@Param("timezone") String timezone
);
例如时区可以是:
String timezone = "UTC";
更改后,我收到一个错误:
错误:列“o.earliest_delivery_time”必须出现在 GROUP BY 子句中或在聚合函数中使用
我尝试了很多解决方案,但没有一个对我有用。
我遇到了类似的问题,以下更改应该有帮助
尝试使用
group by month
而不是
group by to_char(o.earliest_delivery_time at time zone :timezone, 'Mon YYYY')
附注迟到的答案=),但也许这对某人有用