【问题标题】:Select count id_product for id_emp between some date在某个日期之间为 id_emp 选择计数 id_product
【发布时间】:2017-05-08 14:30:57
【问题描述】:

我在 MySQL 中有一个表,它使用产品 ID 显示员工的购买情况。它也显示了他们购买的日期。 这是我的问题,我想做一个选择来计算员工在某个日期之间所做的产品数量。

我的桌子的一个例子。

Time                     | Emp_id |  prod_id 
--------------------------------------------
2017-03-28 08:03:01.777  | 34     |  144  
2017-03-28 08:15:58.657  | 34     |  156  
2017-03-28 10:14:34.232  | 34     |  156  
2017-03-29 17:03:41.655  | 34     |  156    
2017-03-28 20:13:28.111  | 55     |  1090  
2017-03-28 16:45:17.777  | 55     |  1090  
2017-03-29 19:03:01.777  | 55     |  76

我想像这样在 2017-03-28 和 2017-03-29 之间获得所有购买:

day        | employee | product | count
---------------------------------------
2017-03-28 | 34       | 144     | 1  
2017-03-28 | 34       | 156     | 2  
2017-03-28 | 55       | 1090    | 2  
2017-03-29 | 34       | 156     | 1    
2017-03-29 | 55       | 76      | 1

我真的不知道该怎么做,谁能帮帮我?

【问题讨论】:

  • 到目前为止你尝试了什么?结果背后的逻辑是什么?

标签: mysql sql database select


【解决方案1】:

您可以通过在 MySQL 中使用聚合函数 count()Date() 函数轻松地做到这一点。这会按天计算每位员工的所有产品:

select 
    Date(`Time`) as day,
    Emp_id,
    prod_id,
    count(*) as `count`
from Table1
where `Time` >= '2017-03-28'
    and `Time` < '2017-03-30'
group by Date(`Time`), Emp_id, prod_id;

这是demo

【讨论】:

    【解决方案2】:

    这似乎是一个简单的聚合。

    select date(time) as day,
        emp_id as employee,
        prod_id as product,
        count(*) as count
    from your_table
    where time >= '2017-03-28'
        and time < '2017-03-30'
    group by date(time),
        emp_id,
        prod_id;
    

    【讨论】:

    • 为什么不使用 BETWEEN?
    • 因为那时我将不得不使用date(time) between date1 and date2,它不会是 Sargable 即如果有可用的索引将无法受益。
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2017-03-07
    • 2015-07-08
    相关资源
    最近更新 更多