MySQL按日期列和整数列排序,但是否指定整数列的排序规则?

MySQL按日期列和整数列排序,但是否指定整数列的排序规则?,mysql,sql,database,sql-order-by,case,Mysql,Sql,Database,Sql Order By,Case,我有下表: ----------------------------------- PK integer date ----------------------------------- 1 2 03/01/01 2 1 04/01/01 3 3 02/01/01 4 3 05/0

我有下表:

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             03/01/01
  2          1             04/01/01
  3          3             02/01/01
  4          3             05/01/01
  5          2             01/01/01
  6          1             06/01/01
我想做的是按日期列排序,但是整数2的日期的顺序要高于其他整数的顺序。我的输出是这样的

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             01/01/01
  5          2             03/01/01      
  3          3             02/01/01
  2          1             04/01/01
  4          3             05/01/01
  6          1             06/01/01
目前,我完全不知道如何在MySQL中实现这一点,甚至不知道这是否可能。我还没有尝试过任何东西,因为我甚至不知道从哪里开始

我应该说,不是2的整数的顺序不是一个问题,所以下表同样好

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             01/01/01
  5          2             03/01/01      
  2          1             04/01/01
  6          1             06/01/01
  3          3             02/01/01
  4          3             05/01/01

如果我理解正确的话,你想把整数按最小日期排序

您需要计算此字段,将其加入,然后将其用于排序:

select t.*
from t join
     (select `integer`, min(date) as mindate
      from t
      group by `integer`
     ) tm
     on tm.`integer` = t.`integer`
order by tm.mindate, integer;

您可以在上查看结果。

您可以按计算表达式对查询排序,例如,大小写:


使用联合体执行此操作比我最初想象的要复杂,但您可以指定优先级:

SELECT 1 as priority, id, mynumber, date from myTable
WHERE mynumber = 2

UNION

SELECT 2, id, mynumber, date from myTable
WHERE mynumber <> 2

ORDER BY priority ASC, date ASC

最简单的方法是将整数减去2,然后得到该数字的绝对值。那就这样吧。2-2的绝对值始终为零,任何其他计算值都将大于零。因此,您将强制将2的整数置于列表的顶部:

这样做容易

编辑:


那么这个输出会是什么呢?我认为整数2不会在上面。@Gaz_Edge。请参阅当前版本。上一个版本有一个错误,当前版本已经过测试。@Gordon Linoff,查看您的SQL FIDLE,当整数不是2时,日期没有排序。您在2001年1月4日之前有2001年1月5日。@Linger。这是因为1月5日的整数值是3。它是按整数的最小日期排序的。这不起作用。日期没有定。为了帮助你们,我稍微修改了这个问题understand@Gaz_Edge,我修改了我的答案,第二次按日期排序。虽然这是一个聪明的解决方案,适用于3以下的整数,但从那以后,它开始变得不可靠:我添加了排序以显示发生了什么on@Digital克里斯,对了,对任何大于3的整数都不行。基于Gaz_Edge样本数据,我得出了这个明确的答案,因为没有大于3的整数。如果使用大于3的整数,Mureinik答案或您的答案将起作用。不起作用。我稍微修改了这个问题,因为我认为日期令人困惑people@Gaz_Edge编辑了我的答案现在试试我的第二次编辑和第二次demo@Gaz_Edge它在你的最后一把小提琴中也很有效,但似乎不起作用。日期没有安排。我修改了问题,因为我认为日期让人困惑。@Gaz_Edge晚了一天,少了一美元,但还有另一个有效的解决方案。+1,第一个用案例陈述回答有效解决方案的人。我最喜欢这个答案,因为它是最灵活的+1
SELECT 1 as priority, id, mynumber, date from myTable
WHERE mynumber = 2

UNION

SELECT 2, id, mynumber, date from myTable
WHERE mynumber <> 2

ORDER BY priority ASC, date ASC
SELECT * FROM myTable
ORDER BY ABS(`integer` - 2), `date`
   select * from Table1
   order by case when `integer` != 2 then `date` end asc ,
            case when `integer` = 2 then `date` end asc ;