[英]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.