【问题标题】:Select data for last 10 days选择过去 10 天的数据
【发布时间】:2018-11-06 10:18:53
【问题描述】:

我想为显示过去 10 天每天的交易量的条形图实现 SQL 查询。例如我有这个表结构:

CREATE TABLE `payment_transactions` (
  `id` int(11) NOT NULL,
  `amount` int(11) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
);

我需要得到这个示例结果(每天分组):

Date       | Amount| Number of transactions per day |
11-11-2018 | 30    | 3                              |
11-12-2018 | 230   | 13                             |

如何使用 MariaDB 实现这一点?

【问题讨论】:

  • 您是否需要每天的总金额 - 如果您以表格格式提供您的预期输出会更好
  • 是的 - 我需要每天的总金额
  • 这是一个非常广泛的问题,答案可能是“写一个查询”。在来这里之前,您至少应该自己尝试一下。然后告诉我们您的具体问题,即您尝试了什么以及您实际卡在哪里。

标签: sql date datetime group-by mariadb


【解决方案1】:

你只需要从日期和分组中去掉时间部分:

SELECT DATE(created_at) AS Date, SUM(amount) AS Total_Amount, COUNT(*) AS Num_Transactions
FROM t
GROUP BY DATE(created_at)

要将结果限制为过去 10 天,请使用以下 where 子句:

-- 10 days including today
WHERE created_at >= CURRENT_DATE - INTERVAL 9 DAY
AND   created_at  < CURRENT_DATE + INTERVAL 1 DAY

-- 10 days excluding today
WHERE created_at >= CURRENT_DATE - INTERVAL 10 DAY
AND   created_at  < CURRENT_DATE

-- 10 days from current time
WHERE created_at  > CURRENT_TIMESTAMP - INTERVAL 10 DAY
AND   created_at <= CURRENT_TIMESTAMP

【讨论】:

  • 还有一个问题。如何限制过去 10 天的结果?
  • 查看修改后的答案@peter
【解决方案2】:

你可以试试下面

    select date(created_at) as cdate, sum(amount) as amount,count(id) as 
    nooftransaction
    from payment_transactions
    where date(created_at)>=date(now()- interval 10 day) and date(created_at)<date(now())
    group by date(created_at)

【讨论】:

  • 还有一个问题。如何限制过去 10 天的结果?
  • 您需要添加 where 条件@PeterPenzov - 在我的答案中添加您可以查看
猜你喜欢
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2011-10-19
  • 2021-02-16
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多