- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试创建一个查询以在 SET YEAR and MONTH 时以 12 个月的间隔显示计数(年和月是动态值 - 间隔是 12 个月的静态值).
例如:设置月 = 12 和年 = 2013
This will count from 2013-12-01 to 2014-11-30
其他示例:设置月 = 1 和年 = 2014
This will count from 2014-01-01 to 2014-12-31
我创建了这个 demo但也想在行数不在表中时显示 0,这里我使用了 COALESCE:
SET @var_year = '2013';
SET @var_month = '12';
SET @from = STR_TO_DATE(CONCAT(@var_year, '/', @var_month, '/01'), '%Y/%m/%d');
SET @to = DATE_ADD(@from, INTERVAL 12 MONTH);
SELECT COALESCE(count(created_at), 0) AS count_all,
year(created_at) as actual_year,
month(created_at)as actual_month
FROM creations
WHERE created_at BETWEEN @from AND @to
GROUP BY month(created_at),year(created_at)
ORDER BY year(created_at),month(created_at) ASC
但不幸的是得到了这个结果:
count_all actual_year actual_month
1 2013 12
3 2014 1
2 2014 2
1 2014 3
1 2014 4
1 2014 5
1 2014 6
2 2014 8
1 2014 9
1 2014 10
1 2014 11
我期望这样的结果:
count_all actual_year actual_month
1 2013 12
3 2014 1
2 2014 2
1 2014 3
1 2014 4
1 2014 5
1 2014 6
0 2014 7 <------ HERE I WANT 0 WHEN IS NOT IN DB
2 2014 8
1 2014 9
1 2014 10
1 2014 11
我创建了这个 live demo using month = 12 and year = 2013 ,它确实有效,但在测试和更改月份或年份值后,得到了错误的计数,因此查询无法正常工作,例如这个 demo using month= 1 and year =2013 isn't working correctly
SET @var_year = '2014';
SET @var_month = '1';
SET @from = STR_TO_DATE(CONCAT(@var_year, '/', @var_month, '/01'), '%Y/%m/%d');
SET @to = DATE_ADD(@from, INTERVAL 12 MONTH);
SELECT IFNULL(counter,0) as counter, literals.y AS actual_year, literals.m AS actual_month
FROM (
SELECT @var_month AS m, @var_year + 0 AS y
UNION SELECT IF((@var_month + 1) % 12, (@var_month + 1) % 12, 12) AS m, @var_year + ((@var_month + 1) DIV 12) AS y
UNION SELECT IF((@var_month + 2) % 12, (@var_month + 2) % 12, 12) AS m, @var_year + ((@var_month + 2) DIV 12) AS y
UNION SELECT IF((@var_month + 3) % 12, (@var_month + 3) % 12, 12) AS m, @var_year + ((@var_month + 3) DIV 12) AS y
UNION SELECT IF((@var_month + 4) % 12, (@var_month + 4) % 12, 12) AS m, @var_year + ((@var_month + 4) DIV 12) AS y
UNION SELECT IF((@var_month + 5) % 12, (@var_month + 5) % 12, 12) AS m, @var_year + ((@var_month + 5) DIV 12) AS y
UNION SELECT IF((@var_month + 6) % 12, (@var_month + 6) % 12, 12) AS m, @var_year + ((@var_month + 6) DIV 12) AS y
UNION SELECT IF((@var_month + 7) % 12, (@var_month + 7) % 12, 12) AS m, @var_year + ((@var_month + 7) DIV 12) AS y
UNION SELECT IF((@var_month + 8) % 12, (@var_month + 8) % 12, 12) AS m, @var_year + ((@var_month + 8) DIV 12) AS y
UNION SELECT IF((@var_month + 9) % 12, (@var_month + 9) % 12, 12) AS m, @var_year + ((@var_month + 9) DIV 12) AS y
UNION SELECT IF((@var_month +10) % 12, (@var_month +10) % 12, 12) AS m, @var_year + ((@var_month +10) DIV 12) AS y
UNION SELECT IF((@var_month +11) % 12, (@var_month +11) % 12, 12) AS m, @var_year + ((@var_month +11) DIV 12) AS y)
AS literals
LEFT JOIN
(SELECT count(*) as counter, year(created_at) y, month(created_at) as m
FROM creations WHERE created_at BETWEEN @from AND @to GROUP BY month(created_at),year(created_at)
ORDER BY year(created_at),month(created_at) ASC
) AS counts
ON literals.m = counts.m AND literals.y = counts.y;
我花了几个月的时间搜索有关如何处理这个问题的信息。
如果有人可以帮助我,是无法解决还是其他技巧或查询?
最佳答案
不错的拼图:)
您可以生成一个表,其中包含 12 个月间隔所需的年和月,然后对其进行外部联接:
SET @var_year = '2013'
SET @var_month = '12'
SELECT @row := @row + (case when right(@row,2) = "12" then 89 else 1 end) as YearMonth
FROM
(select 0 union all select 1 union all select 3 union all
select 4 union all select 5 union all select 6 union all
select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11) t,
(SELECT @row:=CONCAT(@var_year,right(concat('0',(@var_month-1)),2))) r
将给予:
| YearMonth |
|-----------|
| 201312 |
| 201401 |
| 201402 |
| 201403 |
| 201404 |
| 201405 |
| 201406 |
| 201407 |
| 201408 |
| 201409 |
| 201410 |
| 201411 |
那么试试这个(以 2014 年为年,1 为月的示例):
MySQL 5.5 架构设置:
CREATE TABLE creations(`id` int, `created_at` date )
;
INSERT INTO creations
(`id`, `created_at`)
VALUES
(1, '2013-12-11'),
(2, '2014-01-11'),
(3, '2014-01-21'),
(4, '2014-01-12'),
(5, '2014-02-22'),
(6, '2014-02-13'),
(7, '2014-03-12'),
(8, '2014-04-23'),
(9, '2014-05-23'),
(10,'2014-06-23'),
(11,'2014-08-23'),
(12,'2014-08-23'),
(13,'2014-09-23'),
(14,'2014-10-23'),
(15,'2014-11-23'),
(16,'2014-12-23')
;
**查询**:
SET @var_year = '2014'
SET @var_month = '1'
SELECT count(created_at) AS count_all,
left(YearMonth,4) as actual_year,
right(YearMonth,2) as actual_month
FROM (
SELECT @row := @row + (case when right(@row,2) = "12" then 89 else 1 end) as YearMonth FROM
(select 0 union all select 1 union all select 3 union all
select 4 union all select 5 union all select 6 union all
select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11) t,
(SELECT @row:=CONCAT(@var_year,right(concat('0',(@var_month-1)),2))) r
) as YearMonthTable
LEFT OUTER JOIN creations ON
CONCAT(year(created_at),right(concat('0',month(created_at)),2)) = YearMonth
GROUP BY YearMonth
ORDER BY YearMonth ASC
Results :
| count_all | actual_year | actual_month |
|-----------|-------------|--------------|
| 3 | 2014 | 01 |
| 2 | 2014 | 02 |
| 1 | 2014 | 03 |
| 1 | 2014 | 04 |
| 1 | 2014 | 05 |
| 1 | 2014 | 06 |
| 0 | 2014 | 07 |
| 2 | 2014 | 08 |
| 1 | 2014 | 09 |
| 1 | 2014 | 10 |
| 1 | 2014 | 11 |
| 1 | 2014 | 12 |
已编辑:
您也可以创建表而不是每次都在子查询中生成它:
MySQL 5.5 架构设置:
CREATE TABLE YearMonthTable(`tblYear` int, `tblMonth` int)
;
INSERT INTO YearMonthTable
(`tblYear`,`tblMonth`)
VALUES
(2013,12),
(2014,1),
(2014,2),
(2014,3),
(2014,4),
(2014,5),
(2014,6),
(2014,7),
(2014,8),
(2014,9),
(2014,10),
(2014,11),
(2014,12),
(2015,1),
(2015,2),
(2015,3),
(2015,4),
(2015,5)
;
查询:
SET @var_year = '2014'
SET @var_month = '1'
SET @from = STR_TO_DATE(CONCAT(@var_year, '/', @var_month, '/01'), '%Y/%m/%d')
SET @to = DATE_ADD(DATE_ADD(@from, INTERVAL 12 MONTH), INTERVAL -1 DAY)
SELECT count(created_at) AS count_all,
tblYear as actual_year,
tblMonth as actual_month
FROM YearMonthTable
LEFT OUTER JOIN creations ON year(created_at) = tblYear AND
month(created_at) = tblMonth
WHERE STR_TO_DATE(CONCAT(tblYear, '/', tblMonth, '/01'), '%Y/%m/%d')
BETWEEN @from AND @to
GROUP BY tblMonth, tblYear
ORDER BY tblYear, tblMonth
Results :
| count_all | tblYear | tblMonth |
|-----------|---------|----------|
| 3 | 2014 | 1 |
| 2 | 2014 | 2 |
| 1 | 2014 | 3 |
| 1 | 2014 | 4 |
| 1 | 2014 | 5 |
| 1 | 2014 | 6 |
| 0 | 2014 | 7 |
| 2 | 2014 | 8 |
| 1 | 2014 | 9 |
| 1 | 2014 | 10 |
| 1 | 2014 | 11 |
| 1 | 2014 | 12 |
关于mysql - 如何使用间隔中的年和月动态显示一行中的零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082636/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!