抱歉,我不确定如何准确地说出这个标题。

鉴于此域:

class PurchaseLog{

    Date dateCreated
    Date logDate // Specific day of log; not necessarily the day it was created
    Branch branch

    static hasMany = [itemCount: ItemCount]
}

和:
class ItemCount {

    Item item
    Long count

    static belongsTo = [purchaseLog : PurchaseLog]
}

系统应该按天或按周获取购买日志(每件商品购买了多少)。给定每个分支的交易记录,它每天创建日志。

每天都可以轻松获取库存日志,但是,系统应合并一周内的物料计数以创建每周日志。我一直在尝试使用SQL,将ItemCount表与PurchaseLog表结合在一起,然后对它们进行分组并合并每个项目的项目计数(获取每个项目每一天的计数总和)。

这是我一直在尝试使用的SQL查询:
WITH purchase_log_list AS (SELECT pl.log_date, ic.item_id, ic.count, pl.branch_id FROM purchase_log AS pl LEFT JOIN item_count AS ic ON pl.id = ic.purchase_log_id )
SELECT item_id, SUM(count) AS countPerWeek, extract(YEAR FROM log_date) as year_group, extract(WEEK FROM log_date) as week_group FROM purchase_log_list WHERE branch_id = :branch_id GROUP BY year_group, week_group, item_id ORDER BY year_group, week_group

它仍然没有按预期工作,并且我已经为此工作了好几天。有什么建议吗?

最佳答案

您可以为此使用HQLHQL具有几个与日期/时间相关的功能,例如daydayofweek monthyear等。您可以将这些功能与group by一起使用,以实现所需的功能。例如,如果要针对PurchaLog.logDate按周分组的项目总和

    //Assuming Item has a name property
    def logs = ItemCount.executeQuery("select item.name, purchaseLog.logDate, sum(count) from ItemCount group by item.name, dayofweek(purchaseLog.logDate)")

注1:这将返回列表列表,而不是ItemCount列表。

注2:每次在选定的列中使用aggregate函数时,都必须明确提及要在查询中使用的字段名称,并且该字段类型不能属于其他域。就像如果您想从Item中获取ItemCount一样,您需要提及Item的字段名称,例如select item.name ...。您不能只提及select item ...

这是HQL DocGrails executeQuery的链接。但是,我在HQL文档中找不到dayofweek。但是它受HQL支持,我已经使用过。这是一条提及此can we group by day of the week using hibernate?的帖子

关于sql - Grails-通过分组和汇总域中的几个元素来检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32941920/

10-15 11:48