- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种方法来检索过去 12 个月内所有职位空缺的订阅。由于并非每个职位空缺都会在每个月都有订阅,因此某些行必须返回 0,但现在它不在结果集中。如何添加缺失的行?
我使用的表格如下:
CREATE TABLE `calendar_months` (
`month_id` int(8) DEFAULT NULL,
`en_abbr` varchar(255) NOT NULL,
`en_long` varchar(255) NOT NULL,
`nl_abbr` varchar(255) NOT NULL,
`nl_long` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `calendar_months` (`month_id`, `en_abbr`, `en_long`, `nl_abbr`, `nl_long`) VALUES
(1, 'jan', 'January', 'jan', 'Januari'),
(2, 'feb', 'February', 'feb', 'Februari'),
(3, 'mar', 'March', 'mrt', 'Maart'),
(4, 'apr', 'April', 'apr', 'April'),
(5, 'may', 'May', 'mei', 'Mei'),
(6, 'jun', 'June', 'jun', 'Juni'),
(7, 'jul', 'July', 'jul', 'Juli'),
(8, 'aug', 'August', 'aug', 'Augustus'),
(9, 'sep', 'September', 'sep', 'September'),
(10, 'oct', 'October', 'okt', 'Oktober'),
(11, 'nov', 'November', 'nov', 'November'),
(12, 'dec', 'December', 'dec', 'December');
CREATE TABLE `vacancies` (
`vacancy_id` int(11) NOT NULL,
`org_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL COMMENT 'title',
`description` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`is_deleted` tinyint(4) NOT NULL DEFAULT '0',
`status` int(11) NOT NULL DEFAULT '0'COMMENT
) ;
CREATE TABLE `vacancy_subscriptions` (
`subscription_id` int(11) NOT NULL,
`vacancy_id` int(11) DEFAULT NULL,
`user_id` int(10) DEFAULT NULL,
`subscription_date` datetime NOT NULL,
`message` text
)
我使用以下查询:
SELECT
CONCAT(cm.nl_long, ' ', YEAR(v.create_time)) as label, YEAR(v.create_time) as vacyear, MONTH(v.create_time) as vacmonth, COUNT(*) as totalsubscriptions
FROM `calendar_months` as cm
LEFT JOIN `vacancies` as v on cm.month_id = month(v.create_time)
LEFT JOIN `vacancy_subscriptions` as vs on v.vacancy_id = vs.vacancy_id
WHERE
(v.create_time >= (DATE_ADD(NOW(),INTERVAL -12 MONTH)))
AND v.is_deleted = 0
AND v.org_id = 1
GROUP BY vacyear, vacmonth
ORDER BY vacyear ASC, vacmonth ASC
这给了我我正在寻找的结果。
+---------------+---------+----------+--------------------+
| label | vacyear | vacmonth | totalsubscriptions |
+---------------+---------+----------+--------------------+
| Oktober 2017 | 2017 | 10 | 5 |
| November 2017 | 2017 | 11 | 1 |
| December 2017 | 2017 | 12 | 13 |
| Maart 2018 | 2018 | 3 | 4 |
| April 2018 | 2018 | 4 | 5 |
+---------------+---------+----------+--------------------+
但是,如何添加过去 12 个月内没有订阅的月份,并且最后一列仅为“0”?像这样:
+----------------+---------+----------+--------------------+
| label | vacyear | vacmonth | totalsubscriptions |
+----------------+---------+----------+--------------------+
| Mei 2017 | 2017 | 5 | 0 |
| Juni 2017 | 2017 | 6 | 0 |
| Juli 2017 | 2017 | 7 | 0 |
| Augustus 2017 | 2017 | 8 | 0 |
| September 2017 | 2017 | 9 | 0 |
| Oktober 2017 | 2017 | 10 | 5 |
| November 2017 | 2017 | 11 | 1 |
| December 2017 | 2017 | 12 | 13 |
| Januari 2018 | 2018 | 1 | 0 |
| Februari 2018 | 2018 | 2 | 0 |
| Maart 2018 | 2018 | 3 | 4 |
| April 2018 | 2018 | 4 | 5 |
+----------------+---------+----------+--------------------+
更新:我创建了一个包含一些数据的 SQL fiddle ! http://www.sqlfiddle.com/#!9/75db76
最佳答案
你的逻辑有问题。您的日历表需要包含月份和年份,以及该月的第一个日期(为了方便起见)。
然后你可以这样做:
SELECT CONCAT(cm.nl_long, ' ', cm.year) as label, COUNT(*) as totalsubscriptions
FROM calendar_months cm LEFT JOIN
vacancies v
ON cm.month_id = month(v.create_time) AND
cm.year = year(v.create_time) AND
v.is_deleted = 0 AND
v.org_id = 1 LEFT JOIN
`vacancy_subscriptions` vs
on v.vacancy_id = vs.vacancy_id
WHERE cm.month_start_date >= DATE_ADD(NOW(), INTERVAL -12 MONTH))
GROUP BY label
ORDER BY MIN(cm.month_start_date);
注释:
ON
子句中(对于 LEFT JOIN
)。GROUP BY
需要位于第一个表中的字段上。NOW()
- 您将获得 13 个月的数据,其中包括第一个月和最后一个月的部分数据。关于mysql - 在mysql查询结果中添加过去一年的所有月份,即使没有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49819381/
我有一些文档,它的创建时间以毫秒为单位。我需要将它们分为今天、昨天、过去 7 天、过去 30 天、超过 30 天。 我使用了以下代码:convertSimpleDayFormat(1347022979
我正在尝试创建一个 Crystal 报告,用于在图表中显示十二个月的月费率。 对于此任务,我有一个 dc_date(mm/dd/yyyy) 作为变量,我将其更改为 mmyyyy 格式。但是当我看到月份
我想使用 Linux 命令将年转换为天(过去)。例如: 用户给出的号码:10年前 程序应计算 10 年前的天数总和(例如:10*12*31(年/月/日)--> 3720 天)。 程序将其与今年开始的当
我的要求有点复杂,为了便于理解,让我用简单的例子说明一下。假设,我们必须计算过去 12 个月消费者按月购买的产品数量。所以我们要做的是: SELECT DATENAME(MONTH, m.Invoic
如果我今天(2012 年 8 月 21 日)运行查询,我想得到这个结果集: [...] 为了得到这个,我正在使用以下内容,但它似乎过于复杂。这可以简化吗? ;WITH Numbers_cte([num
这是我目前用来显示下周五日期的方法。 $date_friday = date('F j', strtotime('Friday')); print $date_friday; 我应该使用什么来显示过去
我有一个包含一个日期时间列的表。我只需要返回过去 6 个月的行。这可以通过 来完成 where datetime_column > DATEADD(m, -6, current_timestamp)
我正在为我的应用使用 Firestore,并且希望能够获得过去 7 天内发布的最受欢迎的项目。在理想的情况下,调用看起来像这样: let calendar = Calendar.cur
我有以下方法来计算时间: public static String sumTime(String date1, String date2) throws ParseException { Ca
我想检索过去 24 小时内发布的观看次数最多的前 10 个主题。如果网站在过去 24 小时内获得的主题少于 10 个,则必须检索前一天剩余的浏览次数最多的主题。 我以unix格式将时间存储在数据库中,
我想从我的 MySQL 服务器获取过去 x 个月的所有记录。例如使用 2 个月(不是过去 2 个月,比如过去 60 天,而是过去整个月等等。如果实际月份是 4 月,我想要 2 月和 3 月的所有记录)
我正在尝试使用 php 创建一个博客系统,我需要一种方法来计算过去 21 天内浏览次数最多的帖子。有人知道这样做的好方法吗? 我对 php 没有太多经验,所以我需要有人给我指出正确的方向。我试图研究
我正在尝试查找过去 26 周每周结束时的用户总数。 例如, 从第 26 周开始,该周有 100 名用户注册,并且有 20 名新用户注册,因此到第 26 周结束时,注册用户数量为 120 名 从第 25
假设我们有下表,列如下所示: Rides ride_id start_time end_time passenger_id driver_id ride
好的,我正在尝试获取过去 24 小时内包含“价格”列的所有行的平均值。 $tickerBuy = $this->model->ticker("date AS datetime, avg(price)
我有一个账户表,其中名为“dateCreation”的列是账户的创建日期。 我想获取过去 12 个月内创建的所有帐户,但有时 2 个月或更长时间都没有创建帐户。在这几个月里,我希望 mysql 返回
是否有办法检索过去 7 天内添加的所有用户?添加用户时,包含时间戳。日期被添加到他们的“信息”中。 例如这样: 因此日期公式为:D/M/YYYY。谁能帮我理解如何做到这一点? PS:奇怪的OL3gee
我有一个 Angualr 服务,可以列出从当前月份开始的 12 个月和年份: JS: app.factory('12months', function() { return {
我有一个弹出窗口,其中一个名为 fade 的元素应该扩展到屏幕的整个宽度(当没有可滚动内容时它会这样做)。但是,当内容超过浏览器窗口的 100% 时,它不会扩展到页面高度的 100%。 如果我设置 h
我正在尝试选择过去 5 天的整数字段的总和,我需要将它分组为每一天。 我在确定分组时遇到了一些问题。到目前为止,这是我的 sql 查询: select sum(`amount_sale`) a
我是一名优秀的程序员,十分优秀!