【问题标题】:Query to Get Count Value based on Time Interval根据时间间隔查询获取计数值
【发布时间】:2019-07-05 15:56:54
【问题描述】:

我有这样的桌子:

p_central_ticket
================
- t_id              ======>   id ticket
- t_open_by         ======>   name that raise the ticket
- t_closed_by       ======>   name that closed the ticket 
- t_open_time       ======>   open ticket time
- t_closed_time     ======>   closed ticket time

如果我想显示按名称关闭的所有门票以及今天、每周、每月和每年的关闭时间,我应该怎么做?就像这样:

    Name                today      weekly     monthly     yearly     
=================================================================   
test1@random.com         2           10          70        1000         
test2@random.com         5           14          60        1234

样本数据:

t_id      t_open_by      t_closed_by       t_open_time        t_closed_time
===========================================================================
 1     amir@random.com   test1@random.com   2018-03-28          2018-03-29
 2     tiki@random.com   test1@random.com   2018-04-28          2018-05-29

需要帮助的人... 谢谢

【问题讨论】:

  • 能否提供一些示例数据
  • 我已经创建了示例数据,希望你能理解@MuhammadWaheed
  • 可以获取数据但我没有找到条件。我们可以找到今天,但是周、月、年呢(上周 - 上/当前/12 个月平均月 - 上/当前年)

标签: mysql sql database database-design relational-database


【解决方案1】:

类似的东西:

SELECT `t_closed_by`,
  COUNT( case when `t_closed_time` > curdate() - interval '1' day THEN 1 END ) as today,
  COUNT( case when `t_closed_time` > curdate() - interval '7' day THEN 1 END ) as weekly,
  COUNT( case when `t_closed_time` > curdate() - interval '1' month THEN 1 END ) as monthly,
  COUNT( case when `t_closed_time` > curdate() - interval '1' year THEN 1 END ) as yearly
FROM Table1
GROUP BY `t_closed_by`

演示:http://sqlfiddle.com/#!9/3d792/11

【讨论】:

  • 它有效。但是我想问你一件事,为什么第一行总是出现空用户名,总票数更高?
【解决方案2】:

在 MySQL 中可以使用类似下面的内容:(注意如果有错误请检查语法。)

SELECT a1.t_closed_by as Name,
    (SELECT COUNT(*) FROM p_central_ticket WHERE t_closed_time = CURDATE() and t_closed_by = a1.t_closed_by) as today,
    (SELECT COUNT(*) FROM p_central_ticket WHERE t_closed_time > DATE_SUB(CURDATE(), INTERVAL 7 DAY) and t_closed_by = a1.t_closed_by) as weekly,
    (SELECT COUNT(*) FROM p_central_ticket WHERE t_closed_time > DATE_SUB(CURDATE(), INTERVAL 30 DAY) and t_closed_by = a1.t_closed_by) as monthly,
    (SELECT COUNT(*) FROM p_central_ticket WHERE t_closed_time > DATE_SUB(CURDATE(), INTERVAL 365 DAY) and t_closed_by = a1.t_closed_by) as yearly
FROM (SELECT DISTINCT t_closed_by FROM p_central_ticket) a1 ;

【讨论】:

    【解决方案3】:

    您可以使用它以偶数分钟的时间间隔从表中获取记录

     SELECT column1,column2,.... FROM tableName
        WHERE
            (DateAndTime BETWEEN '2019-02-11 14:00' AND '2019-02-12 22:00')
        AND
            (DATEPART(MINUTE, DateAndTime) % 60 = 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2020-04-23
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多