带条件的sql语句顺序总是失败?

时间:2016-06-18 01:12:15

标签: mysql sql

我想用自定义顺序显示所有行,部分第一行的数据与2天前相同,直到当前日期(使用2016-06-18作为当前日期),之后请自定义基于最小数量的dist的行, 我使用这个sql来检索数据但总是失败。

SELECT pwaktuserver as date,
            acos(cos(-7.47353794753 * (PI()/180)) *
            cos(112.343534533 * (PI()/180)) *
            cos(plat * (PI()/180)) *
            cos(plong * (PI()/180))
            +
            cos(-7.47353794753 * (PI()/180)) *
            sin(112.343534533 * (PI()/180)) *
            cos(plat * (PI()/180)) *
            sin(plong * (PI()/180))
            +
            sin(-7.47353794753 * (PI()/180)) *
            sin(plat * (PI()/180))
            ) * 3959 as Dist
                    FROM tbpos INNER JOIN tbanggota ON tbanggota.id_a = tbpos.id_a WHERE stsTampil <> '2'
                    GROUP BY tbpos.posid
                    ORDER BY case when date(pwaktuserver)>=curdate()-2 then Dist*(-1) else Dist end

上面的sql语句的结果 enter image description here

注意:1。黄色方框是由2天前的日期组成的行组

  1. 蓝框是由行排序asc组成的行组。
  2. 排序的数据返回核心值黄色框作为第一部分,蓝色框作为第二部分,但我的问题是在黄色框中日期不是订购DESC ,我想制作黄色框有序desc,如何我实现了我的目标?感谢

1 个答案:

答案 0 :(得分:2)

添加另一个条件。

  ORDER BY CASE WHEN date(pwaktuserver)>=curdate()-2 THEN date(pwaktuserver)
                                                     ELSE null
           END DESC,  
           CASE WHEN date(pwaktuserver)>=curdate()-2 THEN Dist*(-1) 
                                                     ELSE Dist 
           END ASC -- OR DESC