尝试在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))
答案 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
子句中的单独子查询。我们无法在主查询中计算它,而主查询没有进行聚合。