Der*_*air 78 mysql sql group-by date
给定一个在每一行上都有时间戳的表,如何格式化查询以适应这种特定的json对象格式.
我试图将json对象组织成数年/月.
json将查询基于:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的查询 -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
Run Code Online (Sandbox Code Playgroud)
查询正在崩溃,因为它(可预见地)将不同年份汇总在一起.
Mit*_*sey 162
GROUP BY YEAR(t.summaryDateTime), MONTH(t.summaryDateTime) DESC;
Run Code Online (Sandbox Code Playgroud)
是你想要的.
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
Run Code Online (Sandbox Code Playgroud)
应该在YEAR和Month使用DESC来获得正确的订单.
我知道这是一个老问题,但如果您不需要数据库级别的月份名称,以下应该可以工作:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month
FROM trading_summary
GROUP BY summary_year_month;
Run Code Online (Sandbox Code Playgroud)
您可能会发现这样的性能更好……如果您正在应用程序层构建 JSON 对象,您可以在运行结果时进行格式化/排序。
注意,我不知道您可以将 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;
Run Code Online (Sandbox Code Playgroud)
我更喜欢
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";
Run Code Online (Sandbox Code Playgroud)