如果每个行都有一个时间戳表,那么如何格式化查询以适应这种特定的json对象格式。
我正在尝试将json对象组织成数年/月。
json以查询为基础:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
这是我到目前为止的查询 -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
查询正在破裂,因为它(可预见地)将不同年份汇总在一起。
答案 0 :(得分:150)
GROUP BY YEAR(t.summaryDateTime), MONTH(t.summaryDateTime) DESC;
是你想要的。
答案 1 :(得分:59)
GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m')
答案 2 :(得分:8)
SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM trading_summary t
GROUP BY YEAR(t.summaryDateTime) DESC, MONTH(t.summaryDateTime) DESC
应该在YEAR和Month使用DESC才能获得正确的订单。
答案 3 :(得分:5)
我更喜欢
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";
答案 4 :(得分:3)
我知道这是一个古老的问题,但是如果您不需要数据库级别的月份名称,则下面的方法应该起作用:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month
FROM trading_summary
GROUP BY summary_year_month;
您可能会发现它的性能更好。.并且,如果您在应用程序层中构建JSON对象,则可以在运行结果时进行格式化/排序。
NB :我不知道您可以将DESC添加到MySQL中的GROUP BY子句中,也许您缺少ORDER BY子句:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month
FROM trading_summary
GROUP BY summary_year_month
ORDER BY summary_year_month DESC;
答案 5 :(得分:2)
你必须做这样的事情
SELECT onDay, id,
sum(pxLow)/count(*),sum(pxLow),count(`*`),
CONCAT(YEAR(onDay),"-",MONTH(onDay)) as sdate
FROM ... where stockParent_id =16120 group by sdate order by onDay
答案 6 :(得分:1)
使用像这样的EXTRACT函数
mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
-> 2009
答案 7 :(得分:0)
您只按月分组,您必须通过
将YEAR()添加到组中答案 8 :(得分:0)
SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month
FROM trading_summary t GROUP BY yr
仍然需要在外部脚本中处理它以获得您正在寻找的结构。
例如,使用PHP的爆炸从月份名称列表创建数组,然后使用json_encode()
答案 9 :(得分:0)
您也可以这样做
SELECT SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12
按年份和月份订购。假设您要从今年和本月起一直订购到12个月
答案 10 :(得分:0)
这是我的方法:
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime);
答案 11 :(得分:-1)
我想按年份(日期时间)、月份(日期时间)和按提取物(日期时间的年份_月份)添加分组之间的差异。 这是我在这两种情况下尝试的查询。
从表中选择年(datetimecol)作为年,月名(datetimecol)作为月
按年(datetimecol)和月(datetimecol)按年(datetimecol)desc排序;
结果:
2020 年 5 月
从表中选择年(datetimecol)作为年,月名(datetimecol)作为月 GROUP BY EXTRACT(YEAR_MONTH FROM datetimecol) order by year(datetimecol) desc,month(datetimecol) asc;
结果:
2021 年 1 月 2021年二月 2021年3月 2021 年 4 月 2021 年 5 月 2020 年 5 月 2020 年 6 月 2020 年 7 月 2020年8月 2020 年 9 月 2020 年 10 月 2020 年 11 月 2020 年 12 月
(这是我需要的结果)
我的观察 1.当我与 group by year(datetimecol),month(datetimecol) 一起使用时,没有给出预期的结果..可能是因为 datetime field ... 2.当我用 GROUP BY EXTRACT(YEAR_MONTH FROM datetimecol) order by year(datetimecol) 厌倦了第二次查询时......它工作得很好。
总而言之,要逐年获取月数,请使用以下查询。
从表中选择年(datetimecol)作为年,月名(datetimecol)作为月 GROUP BY EXTRACT(YEAR_MONTH FROM datetimecol) order by year(datetimecol) desc,month(datetimecol) asc;
答案 12 :(得分:-2)
使用
GROUP BY year, month DESC";
而不是
GROUP BY MONTH(t.summaryDateTime) DESC";