在mysql中的order by子句后添加if else

时间:2017-06-24 07:50:04

标签: mysql

尝试在order by子句之后添加if else条件以添加限制。我必须根据条件包括限制。我正在尝试查询,但它会生成错误。无法理解它有什么问题请帮助!!

我的查询:

select
    date_format(CONVERT_TZ(session_start, @@session.time_zone, '+05:30'),'%d %b, %y - %h:%i %p') session_start
FROM user_track
WHERE user_track.id='xyz123'
ORDER BY user_track.Sno DESC
if(count(session_start) > 1,(limit 1,1),(limit 1))

1 个答案:

答案 0 :(得分:0)

MySQL(以及任何其他RDBMS)在LIMIT子句中不允许使用此类逻辑。但一种解决方法可能是使用行号变量来选择性地选择第一个记录,或者第一个记录偏移一个,即第二个记录:

SET @row_number = 0;

SELECT t.session_start
FROM
(
    SELECT
        date_format(CONVERT_TZ(session_start, @@session.time_zone, '+05:30'),'%d %b, %y - %h:%i %p') session_start,
        (@row_number:=@row_number + 1) AS rn
    FROM user_track
    WHERE id = 'xyz123'
    ORDER BY Sno DESC
) t
WHERE
    t.rn = CASE WHEN (SELECT COUNT(session_start) FROM user_track
                      WHERE id = 'xyz123') > 1
                THEN 2 ELSE 1 END

请注意,我们需要将计数移动到WHERE子句中的单独子查询。我们无法在主查询中计算它,而主查询没有进行聚合。