每年的查询计数基于单个日期

时间:2017-01-30 13:51:00

标签: mysql

根据我们已经收集的信息,我被要求提供关于入门/离开者的一些报告。

我试图弄清楚这是否可以由MySQL本身完成,或者我是否需要进行多次调用。

在最简单的层面上,我们的数据结构是:

ID    psName     dtStart     dtLeave

(这是从多个表格中产生的,这些表格包含Office,状态等,我们可能会将其用于更复杂的查询)

对于给定日期,我可以使用以下查询来获取公司中的人数:

SELECT COUNT(*) FROM
(
  SELECT ID, psName, dtStart, dtLeave
  FROM people
) st
WHERE (dtStart <= "2016-06-04" ) 
AND (dtLeave >= "2016-06-04" OR dtLeave IS NULL) 

我希望能够提供一个日期,例如“2016-04-06”,并获得历史上该日期的计数列表(无论是列还是行)。

6/4/2016 200
6/4/2015 175
6/4/2014 150
6/4/2014 125
6/4/2013 100

这是否有意义,如果有,是否可能?

1 个答案:

答案 0 :(得分:1)

请注意,没有开始日期和结束日期,此查询将扫描所有表记录。

实际上,您可以将查询缩减为:

SELECT YEAR(dtStart) as 'year', COUNT(*) FROM
FROM people
WHERE MONTH(dStart) = 4 AND DAY(dStart) = 6
GROUP BY YEAR(dtStart);

<强>更新

在选定的时间段内招聘人员:

SET @SelectedDate = '2016-04-06';

SELECT YEAR(dStart), COUNT(*), @SelectedDate FROM
(
  SELECT ID, psName, dtStart, dtLeave
  FROM people
  WHERE DATE_FORMAT(dtStart, '%m%d') <= DATE_FORMAT(@SelectedDate, '%m%d')
        AND DATE_FORMAT(dtleave, '%m%d') >= DATE_FORMAT(@SelectedDate, '%m%d')
) st
GROUP BY YEAR(dStart);