我有一个包含两个日期的表和一个产品,考虑到每个产品的最后三行,我需要得到它们之间的平均日差。

SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product = 121

这给出了产品121的所有日期差的平均值
SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product = 121 LIMIT 3

仍然给出了所有记录的平均值,忽略了极限参数。
另外,当我尝试其他方法时,它也会忽略最后一个参数,并显示所有行的平均值。
SELECT AVG(DATEDIFF(date2, date1)) FROM table WHERE product =121 && date1 > 2015-01-01

你知道怎么解决这个问题吗?或者我做错了什么?

最佳答案

当你遇到这样的问题时,我建议你把它拆开放回去。
在进行任何计算之前,您需要知道每个产品的最后三行。因此,如果您希望例如具有最新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;

10-08 09:28