显示整月(关闭&活动天数)

时间:2014-04-28 12:25:43

标签: mysql sql date

我有一张有员工出席的桌子。该表记录了员工的行动(现在,缺席,迟到等)。仅在用户在场时使用该表。休息日(周末)没有入场券。我想显示所有月份,包括他缺席的日子和周末。 例如:如果一个人来20天,它应该显示所有30天,包括他在场的日子。我已经尝试过GetDate,但这适用于个人约会的出席。 谢谢。

1 个答案:

答案 0 :(得分:1)

创建一个Calendar表。如果该日期是工作日,周末,银行假日等,这应该包含您需要的每个日期,并标明该日期

然后它只是一个LEFT JOIN。

SELECT
  *
FROM
  Calendar
LEFT JOIN
  yourTable
    ON  yourTable.date = Calendar.date
    AND yourTable.user = 12345
WHERE
      Calendar.date >= '2014-02-01'
  AND Calendar.date <  '2014-03-01'

对于多个用户,请先将calendar表加入user表。

SELECT
  *
FROM
  Calendar
CROSS JOIN
  User
LEFT JOIN
  yourTable
    ON  yourTable.date = Calendar.date
    AND yourTable.user = User.id
WHERE
      Calendar.date >= '2014-02-01'
  AND Calendar.date <  '2014-03-01'
  AND User.id       IN (1, 2, 3, 4)

此模式主要将日期视为维度(日历表),您可以将其与其他维度表结合使用,以便为数据创建模板。然后将LEFT JOIN您的事实表格放到您的维度模板上。