根据我们已经收集的信息,我被要求提供关于入门/离开者的一些报告。
我试图弄清楚这是否可以由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
这是否有意义,如果有,是否可能?
答案 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);