我有一个包含字段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
我知道使用标准化会很容易。但我没有选择权。我必须只使用这张桌子。
如果有人知道解决方案,那么答案将会受到欢迎。
答案 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)
我纠正了错误。 如果它适合您,请告诉我