mysql - 如何根据没有数据的月份统计并选择所有记录

标签 mysql database datetime count null

我有一个名为 tbl_remit 的表。

id   emp_id    comp_name    e_from       e_to         amount
1     123      a            2016-01-01   2016-01-31   10.00
2     123      a            2016-02-01   2016-02-29    5.00
3     123      a            2016-03-01   2016-03-31   20.00
4     456      b            2016-02-01   2016-02-29   50.00
5     789      c            2016-02-01   2016-02-29   10.00
6     789      c            2016-03-01   2016-03-31   15.00

我需要统计并选择2016-01-01到2016-01-31期间所有未付款的emp_id。

雇主总数:3 (2016-01-01 至 2016-01-31) 期间未付款的雇主总数:2

id   emp_id    comp_name    
1     456      b            
2     789      c            

有没有办法统计没有数据的地方?这是我使用这个语句的语句。

SELECT COUNT(PEN) FROM view_remit WHERE E_FROM != '"& varDateFrom &"' AND E_TO != '"& varDateTo &"' AND Assigned_ACCOUNT = '"& varAssignedAccount &"'

很抱歉提出这个新手问题。

最佳答案

我只有这个表,您可以使用子查询的否定匹配来获取此数据:

SELECT DISTINCT emp_id, comp_name
  FROM tbl_remit
  WHERE emp_id NOT IN 
    (SELECT emp_id 
      FROM tbl_remit
      WHERE (e_from <= '2016-01-31' AND e_to >= '2016-01-01')
    )

首先,子查询从 tbl_remit 的行中选择相关时间段内的所有 emp_id。接下来,您询问那些不在该集合中的 emp_id。

此查询不会显示从未支付过任何费用的人员的 emp_id。如果您有一个包含可能的 emp_id 的单独表,您还可以使用该表作为主查询,并将 emp_id 与 tbl_remit 子查询中的 emp_id 进行匹配。

关于mysql - 如何根据没有数据的月份统计并选择所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39869484/

相关文章:

mysql - 使用 MySQL 和 MariaDB 创建表 Order 出现 1064 错误

mysql - Node.js mysql 查询未执行

MySQL 语法错误,无法识别的关键字 null

java - 如果找不到记录,则 SQL 查询调用失败

mysql - 从同一列中选择特定值的每日数量

sql - BigQuery 比较日期

java - 解决 Java 中时间错误的错误格式?

Android 检查 firebase 连接

php - 有关 GMT 伊朗的问题?

node.js - Mongoose 输出的未知时间戳格式