我有一个包含2个日期的表和一个产品,我需要考虑每个产品的最后3行,得到它们之间的平均天差。
SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product = 121
这给出了产品121的所有日期差异的平均值
SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product = 121 LIMIT 3
仍然给我平均所有记录,忽略LIMIT参数。
此外,当我尝试不同的方法时,它也会忽略最后一个参数并显示所有行的平均值。
SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product =121 && date1 > 2015-01-01
关于如何解决这个或我做错了什么的想法?
答案 0 :(得分:4)
当你遇到这样的问题时,我建议你把它分解并放回去。
在进行任何计算之前,您知道每个产品需要最后三行。因此,如果您想要例如具有最新date2
的行,您可以通过执行以下操作来选择它们:
SELECT *
FROM myTable
WHERE product = 121
ORDER BY date2 DESC
LIMIT 3;
这将选择您想要的3个最新行。然后,只需将其用作子查询来预先形成聚合。这样,只对您关注的行进行计算:
SELECT product, AVG(DATEDIFF(date2, date1))
FROM(
SELECT product, date1, date2
FROM myTable
WHERE product = 121
ORDER BY date2 DESC
LIMIT 3) tempTable;