MYSQL|从单个表中获取两条不同的记录

标签 mysql database

好的。这有点复杂。我一直在努力实现它,但到目前为止还没有实现。

我有三张 table 。 休假批准 请假申请 ml_leave_type

这是leave_approval表 enter image description here

然后从leave_application_id链接到leave_application enter image description here

现在棘手的问题来了, 我想要表中的两条记录。

  1. I want Total leaves taken by employee in year 2014
  2. I want Total Leaves taken by employee in month november of 2014

因此意味着需要每年和每月采用两种不同方法的两列。

到目前为止我有疑问。

SELECT 
  LA.employee_id,
  DATEDIFF(
    LA.approved_to,
    LA.approved_from
  ) AS TotalLeavesTaken,
  LAPP.`entitlement_id`,
  LAPP.`ml_leave_type_id`,
  LA.leave_application_id,
  LA.approved_from AS LeaveFrom,
  LA.approved_to AS LeaveTo 
FROM
  leave_approval LA 
  INNER JOIN leave_application LAPP 
    ON LAPP.application_id = LA.leave_application_id 
WHERE YEAR(LA.approval_date) = 2014
  AND LA.`employee_id` = 1

这是我得到的查询结果.. enter image description here

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

更新

我可能无法清楚地解释我的问题。

我想要实现的是添加两个额外的列,而不是删除我拥有的列。我的意思是我正在使用我拥有的大多数/所有选择字段

另外,我希望将 2014 年的总休假数显示在一列中,并在该年的不同字段中显示当月的总休假数。

这是我想要的例子。>

ml_leave_type_id | Total Leaves Taken in Year (e-g 2014) | Total Leaves taken in Month (e-g November)
     1                          10                                 2
     2                           6                                 0
     3                           4                                 1

最佳答案

类似的事情可以吗?

2014 年,employee_id = 1 的总假期

SELECT 
  LA.employee_id,
  SUM(
     DATEDIFF(
      LA.approved_to,
      LA.approved_from
     )
  ) AS TotalLeavesTaken,
  LAPP.`entitlement_id`,
  LAPP.`ml_leave_type_id`,
  LA.leave_application_id,
  LA.approved_from AS LeaveFrom,
  LA.approved_to AS LeaveTo 
FROM
  leave_approval LA 
  INNER JOIN leave_application LAPP 
    ON LAPP.application_id = LA.leave_application_id 
WHERE YEAR(LA.approval_date) = 2014
  AND LA.`employee_id` = 1
GROUP BY LA.`employee_id` = 1

employee_id = 1、年份 = 2014 年且月份 = 11 的总休假

SELECT 
  LA.employee_id,
  SUM(
     DATEDIFF(
      LA.approved_to,
      LA.approved_from
     )
  ) AS TotalLeavesTaken,
  LAPP.`entitlement_id`,
  LAPP.`ml_leave_type_id`,
  LA.leave_application_id,
  LA.approved_from AS LeaveFrom,
  LA.approved_to AS LeaveTo 
FROM
  leave_approval LA 
  INNER JOIN leave_application LAPP 
    ON LAPP.application_id = LA.leave_application_id 
WHERE YEAR(LA.approval_date) = 2014
  AND MONTH(LA.approval_date) = 11
  AND LA.`employee_id` = 1
GROUP BY LA.`employee_id` = 1

但是,我确实注意到您的数据集中有一些日期重叠。例如:

employee_id = 1 在 2014/11/01 - 2014/11/06 和 2014/11/05 - 2014/11/08 休假。日期 2014/11/05 和 2014/11/06 有何关系。系统将如何处理这种情况

关于MYSQL|从单个表中获取两条不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523470/

相关文章:

database - ms-access 计算字段性能

php - 36列表的数据库设计

sql - 将数据从未知结构的数据库传输到已知结构的数据库

php - 什么是更好的额外查询或数据库中的额外列?

Javascript 数组(内部有对象)到 PHP 以插入数据库

php - 重定向到与 Laravel 数据库中检索到的值相同的页面?

java - 为什么不能从Android应用程序向MySQL插入数据

php - 在登录 ID 已存在的特定列中插入数据

mysql FIND_IN_SET 连接中的多列

mysql - 生成多个查询字符串并一一执行