[英]SQL Query: How to use sub-query or AVG function to find number of days between a new entry?
我有两个表,其中一个称为entities
具有以下相关列: id
, company_id
和integration_id
。 另一个表是具有id
, entity_id
和created_at
列的transactions
。 链接两个表的外键是integration_id
和entity_id
。
transactions
表显示了从entities
表中每个公司收到的交易数。
最终,我想找到发生交易量最大的日期范围,然后从该范围中找到每个公司的两次交易之间的平均天数。
为了找到日期范围,我使用了此查询。
SELECT DATE_FORMAT(t.created_at, '%Y/%m/%d'), COUNT(t.id)
FROM entities e
JOIN transactions t
ON ei.id = t.entity_id
GROUP BY t.created_at;
我得到这个:
Date_FORMAT(t.created_at, '%Y/%m/%d') | COUNT(t.id)
+-------------------------------------+------------
2015/11/09 4
等等
据此,我确定要用作2015/11/09到2015/12/27的范围,并进行了此查询
SELECT company_id, COUNT(t.id)
FROM entities e
INNER JOIN transactions t
ON e.integration_id = t.entity_id
WHERE tp.created_at BETWEEN '2015/11/09' AND '2015/12/27'
GROUP BY company_id;
我得到这个:
company_id | COUNT(t.id)
+-----------+------------
1234 17
等等
这给了我每个公司在此日期范围内进行的总交易。 现在,按公司查询两次交易之间的平均天数的最佳方法是什么? 如何对子查询或在WHERE
子句中的日期上使用AVG
函数的方法?
编辑:
玩查询,我想知道是否有办法
SELECT company_id, (49 / COUNT(t.id))
...
49,因为那是该日期范围内的天数,才能获得两次交易之间的平均天数?
我想可能就是这样,这有意义吗?
我认为这可能有效:
Select z.company_id,
datediff(max(y.created_at),min(created_at))/count(y.id) as avg_days_between_orders,
max(y.created_at) as latest_order,
min(created_at) as earliest_order,
count(y.id) as orders
From
(SELECT entity_id, max(t.created_at) latest, min(t.created_at) earliest
FROM entities e, transactions t
Where e.id = t.entity_id
group by entity_id
order by COUNT(t.id) desc
limit 1) x,
transactions y,
entities z
where z.id = x.entity_id
and z.integration_id = y.entity_id
and y.created_at between x.earliest and x.latest
group by company_id;
没有数据很难。 我有可能在外部查询的子查询/联接中对Integration_id的引用不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.