mysql - 按当月订购月份表

标签 mysql sql-order-by

我想以当前月份为最终位置来排序月份。

我有一个返回以下内容的子查询:

+-----+-----------+
| one | monthname |
+-----+-----------+
| 1   |   Jan     |
| 2   |   Feb     |
| 3   |   Mar     |
| 4   |   Apr     |
| ... |   ...     |
+-----+-----------+

然后我想命令它获取当前月份 (MONTH(NOW())) 作为最后一个值。但我一直收到默认的月份顺序。

例如,今天,七月(7 月),我希望:

+-----+-----------+
| one | monthname |
+-----+-----------+
|  8  |   Aug     |
|  9  |   Sep     |
| 10  |   Oct     |
| 11  |   Nov     |
| 12  |   Dec     |
|  1  |   Jan     |
|  2  |   Feb     |
|  3  |   Mar     |
|  4  |   Apr     |
|  5  |   Mei     |
|  6  |   Jun     |
|  7  |   Jul     |
+-----+-----------+

可以在 SQL 查询中执行吗?如果是这样,最好的方法是什么?

编辑

我当前的查询如下

SELECT `months`,
IFNULL(case_result.Total_rows,0) results 
FROM 
(SELECT `one`,`monthname` AS months FROM 
(SELECT 1 AS `one`, 'JANUARY' AS `monthname` 
UNION SELECT 2 AS `one`,'FEBURARY' AS `monthname` 
UNION SELECT 3 AS `one`, 'MARCH' AS `monthname` 
UNION SELECT 4 AS `one`, 'APRIL' AS `monthname` 
UNION SELECT 5 AS `one`, 'MAY' AS `monthname` 
UNION SELECT 6 AS `one`,'JUNE' AS `monthname` 
UNION SELECT 7 AS `one`,'JULY' AS `monthname` 
UNION SELECT 8 AS `one`, 'AUGUST' AS `monthname`
UNION SELECT 9 AS `one`, 'SEPTEMBER' AS `monthname` 
UNION SELECT 10 AS `one`, 'OCTOBER' AS `monthname` 
UNION SELECT 11 AS `one`, 'NOVEMBER' AS `monthname` 
UNION SELECT 12 AS `one`, 'DECEMBER' AS `monthname` order by ) AS month_table) tempmonths LEFT JOIN (SELECT MONTH(date_surgery) AS `month`, COUNT(id_cases) AS Total_Rows 
FROM cases 
WHERE date_surgery BETWEEN DATE_SUB(NOW(), INTERVAL 11 MONTH) AND NOW()
AND cases.name = 'Bone Tumor'
GROUP BY MONTH(`date_surgery`)) AS case_result ON tempmonths.one = case_result.month

但是我需要订购的部分是这个子查询

SELECT 1 AS `one`, 'JANUARY' AS `monthname` 
    UNION SELECT 2 AS `one`,'FEBURARY' AS `monthname` 
    UNION SELECT 3 AS `one`, 'MARCH' AS `monthname` 
    UNION SELECT 4 AS `one`, 'APRIL' AS `monthname` 
    UNION SELECT 5 AS `one`, 'MAY' AS `monthname` 
    UNION SELECT 6 AS `one`,'JUNE' AS `monthname` 
    UNION SELECT 7 AS `one`,'JULY' AS `monthname` 
    UNION SELECT 8 AS `one`, 'AUGUST' AS `monthname`
    UNION SELECT 9 AS `one`, 'SEPTEMBER' AS `monthname` 
    UNION SELECT 10 AS `one`, 'OCTOBER' AS `monthname` 
    UNION SELECT 11 AS `one`, 'NOVEMBER' AS `monthname` 
    UNION SELECT 12 AS `one`, 'DECEMBER' AS `monthname` order by ...

最佳答案

如果 one 是包含月份编号的列的名称,只需将其添加到您的 select 语句中即可:

order by (one+11-month(now)) % 12

当月该表达式将为 11,而对于所有其他月份,由于模运算符 (%),该表达式会较小。

关于mysql - 按当月订购月份表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38459521/

相关文章:

mysql - 如何在 mySql 中创建弱实体?

MySQL 按标题排序,然后按分组 ID

PHP mysqli_stmt_bind_result 与 mysqli 联合

php - PHP 文档不一致?

mysql - mysql、db2 和 oracle 中的单独查询

mysql - 超出默认相关性的额外全文排序标准

jquery - 使用 jQuery 重新排序 div

MySQL按顺序选择随机行

sql - Oracle 子查询前 1 个结果

mysql - 如果我在较大的 mysql 表中将字段类型从 varchar 更改为 char,它将如何影响数据库