MySQL:获取日期时间的平均值

时间:2016-01-01 10:33:20

标签: mysql datetime

我有一个包含字段id,cust_id,ord_id,ord_date(datetime数据类型)的表。在表格中,我有这样的数据..

id  cust_id  ord_id      ord_date              prod_id
1   1         1          2015-12-01 00:00:00   1
2   1         1          2015-12-01 00:00:00   2
3   1         1          2015-12-01 00:00:00   3
4   2         1          2015-12-01 00:00:00   1
5   1         3          2015-12-03 00:00:00   1
6   1         3          2015-12-03 00:00:00   2
7   1         2          2015-12-02 00:00:00   1
8   3         1          2015-12-03 00:00:00   1
9   3         1          2015-12-03 00:00:00   2
10  2         2          2015-12-07 00:00:00   1
12  2         2          2015-12-07 00:00:00   2
13  3         2          2015-12-10 00:00:00   1
14  1         4          2015-12-12 00:00:00   1
15  3         3          2015-12-15 00:00:00   1

我必须获得每个客户的平均订单时间数据和最后一个ord_id(max ord_id),并且应该由cust_id ASC,ord_id DESC订购。 我希望使用MYSQL查询输出。

cust_id  ord_id    ord_date               ord_avg_day
1        4         2015-12-12 00:00:00     3
2        2         2015-12-07 00:00:00     3
3        3         2015-12-15 00:00:00     4

我试过这个,但失败了,因为它显示了平均时间0。

SELECT cust_id, ord_id, ord_date, AVG(TIME_TO_SEC(ord_date)) AS ord_avg_day FROM tableName GROUP BY cust_id, ord_id ORDER BY cust_id, ord_id DESC

我知道使用标准化会很容易。但我没有选择权。我必须只使用这张桌子。

如果有人知道解决方案,那么答案将会受到欢迎。

1 个答案:

答案 0 :(得分:1)

这是一个简单的方法。有一些你没有使用的输出。你可以删除它。它只是为了测试。

SELECT 
  cust_id
  , count(*) AS ord_id
  , min(ord_date) AS first_order
  , max(ord_date) AS last_order
  , (DATEDIFF(max(ord_date) , min(ord_date)) ) / (count(*)-1) AS ord_avg_day
FROM (
      SELECT *
      FROM myorder
      GROUP BY ord_date,cust_id
    ) AS tmp
GROUP BY cust_id;

<强>结果

+---------+--------+---------------------+---------------------+-------------+
| cust_id | ord_id | first_order         | last_order          | ord_avg_day |
+---------+--------+---------------------+---------------------+-------------+
|       1 |      4 | 2015-12-01 00:00:00 | 2015-12-12 00:00:00 |      3.6667 |
|       2 |      2 | 2015-12-01 00:00:00 | 2015-12-07 00:00:00 |      6.0000 |
|       3 |      3 | 2015-12-03 00:00:00 | 2015-12-15 00:00:00 |      6.0000 |
+---------+--------+---------------------+---------------------+-------------+
3 rows in set (0.00 sec)

我纠正了错误。 如果它适合您,请告诉我