gpt4 book ai didi

mysql - 过滤掉分组行的 MAX() 日期之前一年以上的任何内容

转载 作者:行者123 更新时间:2023-11-29 21:53:26 26 4
gpt4 key购买 nike

几天前,我开始发布有关此问题的内容,当时我想,通过阅读一些建议的帖子,我可能已经找到了一个很好的解决方案。不幸的是,我们今天发现存在一些数据差距。据我所知,这是由于查询造成的。

我正在尝试获取一年的元素支出数据。如果一年中多次购买它们,那么我会对它们进行分组并SUM()它们的数量。我们的想法是根据发生的每笔交易获取包含所有所需信息的单行,而不是 2、10 或 100 行。

问题是我不仅仅想要今天一年的数据。我想要该公司批量支出以 MAX(date) 结尾的年份值。换句话说,也许某个产品最后一次购买是在 3 个月前,但他们最后一次已知的交易/采购订单只是 1 个月前。与我们的数据相关的日期应该是1年前到1个月前

的所有内容

这是我目前拥有的:

SELECT id, groupId, datePurchase, vendor, venItem, item, itemDesc, uom, SUM(qtyPurchase) AS `qtyPurchase`, SUM(extPrice) AS `totalPrice`, MAX(unitPrice) AS `maxPrice`, unitPrice, code, stripped_venitem, MAX(datePurchase) as `maxDate`, SUM(extPrice) as `extPrice`, PONum
FROM transactions t
WHERE (((qtyPurchase)!=0))
GROUP BY groupId, vendor, venItem, item, itemDesc, uom
HAVING datePurchase > (MAX(datePurchase) - INTERVAL 1 YEAR);

如果我删除 HAVING 部分,则会显示相关数据。但这并不是说它的日期早于规定的年份。当我删除 HAVING 子句并找到有问题的产品时,maxDate 值为“2015-08-26”

这都是 Solr 导入的一部分,因此我需要在单个查询中得到正确的结果,不需要额外的技巧或处理。感谢您的任何见解!

<小时/>

编辑1:还值得注意的是,我无法将 HAVING datePurchase > (MAX(datePurchase) - INTERVAL 1 YEAR) 部分迁移到 WHERE 子句的一部分。如果直接注入(inject),则会抛出无效使用组函数的错误,如果将其添加为子查询 (...AND datePurchase > (SELECT MAX(datePurchase)...) >) 然后它使用与整个数据集相对应的 MAX(datePurchase) 值,而不是与其相关的特定 groupId。

这也值得强调:最大日期应与每个特定实体(列为 groupId)的一批交易相关,而不是整个表。

最佳答案

我猜这是算术与日期的问题。我将 HAVING datePurchase > (MAX(datePurchase) - INTERVAL 1 YEAR) 更改为 HAVING datePurchase > (MAX(datePurchase) - DATE_SUB(MAX(datePurchase), INTERVAL 1 YEAR)) 瞧!

关于mysql - 过滤掉分组行的 MAX() 日期之前一年以上的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com