2017-09-29 60 views
0

我有一个交易表,我想写一个查询为每天的每个位置的交易数。我已经写了下面的查询只计算交易总额为这就是WHERE子句中指定的时间段:在SQL中按位置计算?

Select Date_Format(T.Date,'%m-%d-%y') as Date, S.StoreLocation, 
    Count(S.StoreLocation) as Transactions 
    From Transactions T 
    Inner Join Stores S on T.StoreCode=S.StoreCode 
    Where T.Date Between '2017-08-01 00:00:00' and '2017-08-31 23:59:59' 
    Group By S.StoreLocation 

为了澄清,表中的每一行是一个交易,所以我只需要统计按地点和按天排列的行数。我希望这样做,因为我需要按地点回顾这些交易,回溯多年,这将是数千万笔交易。

我想对输出数据是这个样子:

日期 | 店铺位置 | 交易记录
08-01-2017 |位置1 | 500
08-02-2017 |位置1 | 450
08-03-2017 |位置1 | 600

...对于超过100个位置中的每个位置和指定的时间段等等等等。

另请注意,我们的日期以格式“2017-08-01 00:00:00”列在表格中,这就是为什么我在查询中更改格式以便每天显示。我正在尝试做什么?我会很感激帮助。

+0

添加DATE_FORMAT(T.Date, '%间%D-%Y')到组由 – twoleggedhorse

+0

看到的是https://meta.stackoverflow .com/questions/333952/why-should-i-provide-an-mcve-for-what-seem-to-to-what-seems-to-very-simple-sql-query – Strawberry

+0

@Strawberry我在写一个sql小提琴的例子,但在我的手机,需要年龄的过程,所以我给用户的东西尝试在此期间 – twoleggedhorse

回答

0

就快成功了,你缺少的是里面的日期之前,您GROUP BY 当你写一个SQL脚本,像这样的,你的问题实际上提供了答案

计数 S的数交易每个位置通过

  1. 计数交易的号码是您的聚合函数COUNT(S.StoreLocation)
  2. 每个位置是第一GROUP BY条款
  3. 通过天是第二GROUP BY条款。

SELECT Date_Format(T.Date,'%m-%d-%y') AS Date 
     ,S.StoreLocation 
     ,COUNT(S.StoreLocation) AS Transactions 
FROM  Transactions T 
     INNER JOIN Stores S 
      ON T.StoreCode = S.StoreCode 
WHERE T.Date BETWEEN '2017-08-01 00:00:00' AND '2017-08-31 23:59:59' 
GROUP BY S.StoreLocation 
     ,Date_Format(T.Date,'%m-%d-%y') 

工作示例可以在这里找到:SQL Fiddle