繁体   English   中英

MySQL - 根据两个日期对计算值进行排序

[英]MySQL - Sort on a calculated value based on two dates

我有一个需要在MySQL查询中解决的以下问题:

Fields
info - textfield
date1 - a date field
date2 - a date field
offset1 - a text field with a number in the first two positions, example "10-High"
offset2 - a text field with a number in the first two positions, example "10-High"

我需要根据当前日期(今天)按计算的“sortvalue”对记录进行排序:

If today<date1 then sortvalue=offset1*10+offset2*5-1000
else if today>=date2 then sortvalue=offset1*10+offset2*5+1000
else sortvalue=offset1*10+offset2*5

我对连接等基本SQL有很好的理解,但是我甚至不确定它是否可能......如果它有助于我可以使用单一的公式,给出与IF相同的效果....即。 在date1 =低值之前,在date2 =高值之后...

Rgds PM

如果将自定义排序值添加到选择列表,则可以直接在ORDER BY子句中使用它。 就像是:

SELECT  field1, field2, fieldn, 
    IF(today < @date1, offset1 * 10 + offset2 * 5 - 1000, 
        IF(today >= @date2, offset1 * 10 + offset2 * 5 + 1000, 
            offset1 * 10 + offset2 * 5
        )
    ) AS sortvalue
ORDER BY sortvalue;

采用:

         ...
    FROM FIELDS t
ORDER BY CASE
           WHEN NOW() < t.date1 THEN CAST(LEFT(offset1, 2) AS INT) * 10 + CAST(LEFT(offset2, 2) AS INT) * 5 - 1000
           WHEN NOW() >= t.date2 THEN CAST(LEFT(offset1, 2) AS INT) * 10 + CAST(LEFT(offset2, 2) * 5 + 1000
           ELSE offset1 * 10 + offset2 * 5
         END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM