查找组中特定行的两个日期列之间的平均值

时间:2015-01-23 18:02:00

标签: mysql average datediff

我有一个包含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

关于如何解决这个或我做错了什么的想法?

1 个答案:

答案 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;