【问题标题】:sql to view date attendance and leave from worksql查看日期出勤和请假
【发布时间】:2021-06-25 03:33:28
【问题描述】:

请帮我解决。

这里我想显示员工上班和下班日期的详细信息。

这是我的查询仍然被误解,

    SELECT
      *
    FROM

    (SELECT
      e.NIK,e.Name,date(d.Enroll)AS attd
    FROM 
      dvc0004 d, emp0003 e
    WHERE
      YEAR(d.Enroll)=YEAR(CURRENT_DATE())) AS subQuery1,

      (select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) 
AS subQuery3,
     
     (SELECT
      a.NIK, a.Name, s.ExcDesc, b.PeriodeIn, b.PeriodeEnd
    FROM 
      emp0003 a, emp0016 b, sys0006 s, dvc0004 d
    WHERE
      a.EmployeeID=b.EmpID AND
      b.ExcId=s.ExcID AND
      a.NIK=d.NIK AND
      s.ExcPay='T' AND YEAR(b.PeriodeIn)=YEAR(CURRENT_DATE())) AS subQuery2
    
      WHERE date.selected_date BETWEEN queryA.PeriodeIn AND queryA.PeriodeEnd 
      AND subQuery1.NIK=subQuery2.NIK

在子查询 1 中:显示员工输入的日期。
在子查询 2 中:显示员工下班的时间。
在子查询 3 中:根据日期范围显示所有日期。


想要的查询结果:

NIK Name Date Presence
012 Rey 01-01-2021 Annual leave
012 Rey 02-01-2021 Attend
012 Rey 03-01-2021 Sick
012 Rey 04-01-2021 Truant
012 Rey 05-01-2021 Attend
011 Yoan 01-01-2021 Attend
011 Yoan 02-01-2021 Attend
011 Yoan 03-01-2021 Annual leave
011 Yoan 04-01-2021 Annual leave
011 Yoan 05-01-2021 Annual leave




这是 fiddleDB 上的示例数据: https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=57fe8cb377bbd54856abdad32d0d9cec

【问题讨论】:

  • 什么 MySQL 版本?
  • update your question,包括样本数据......那些可以返回所需结果的数据。
  • @FaNo_FN :对不起,数据库是 MariaDB 10.0.12
  • @FaNo_FN all sample all table?
  • 嗯.. 是的所有表,但如果它很多,只要可以重现结果,您只需包含几行数据样本。您还可以使用小提琴创建架构并在此处插入示例数据:dbfiddle.uk/?rdbms=mariadb_10.3

标签: mysql sql database date


【解决方案1】:

我完全不明白你想要什么。

“想要的查询结果表”与dbfiddle中的de数据不一致。

检查这个查询,让我知道它有什么问题或遗漏(MariaDB,MySql 8.0):

SELECT *
FROM

(WITH recursive Date_Ranges AS (
   select EmpID, ExcId, PeriodeIn as PeriodeIn, PeriodeEnd  FROM emp0016
   union all
   select EmpID, ExcId, PeriodeIn + interval 1 day, PeriodeEnd
   from Date_Ranges
   where PeriodeIn < PeriodeEnd)
   
SELECT t3.NIK, t3.Name, t1.PeriodeIn AS `date`, t2.ExcDesc AS Presence
FROM emp0003 t3
INNER JOIN Date_Ranges t1 ON t1.EmpID = t3.EmployeeID
INNER JOIN sys0006 t2 ON t2.ExcID = t1.ExcId
WHERE t2.IsActive = 'T'

UNION ALL

SELECT t3.NIK, t3.Name, DATE(t4.Enroll) AS `date`, 'what presence?' AS Presence
FROM emp0003 t3
INNER JOIN dvc0004 t4 ON t3.NIK = t4.NIK
) AS aux

ORDER BY NIK, `date`;

在 dbfiddle 中输出示例数据:

NIK Name date Presence
1 Rey 2021-01-01 Annual Leave
1 Rey 2021-01-02 Truant
1 Rey 2021-01-03 what presence?
1 Rey 2021-01-04 what presence?
1 Rey 2021-01-05 what presence?
1 Rey 2021-01-06 what presence?
2 Yoan 2021-01-01 what presence?
2 Yoan 2021-01-02 Annual Leave
2 Yoan 2021-01-03 Annual Leave
2 Yoan 2021-01-04 Annual Leave
2 Yoan 2021-01-05 what presence?
2 Yoan 2021-01-06 what presence?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多