【问题标题】:Set variable during a query在查询期间设置变量
【发布时间】:2019-02-20 12:56:23
【问题描述】:

有以下查询

SELECT 
Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date',
device_serial as "Device Serial",
customer_name as "Customer",
error_code as 'Error Code',
resolutiom as 'Resolution'
FROM preventive_maintenance
ORDER BY `timestamp` desc
LIMIT 25

我想按随机的“截止日期”订购,我该怎么做?

【问题讨论】:

    标签: mysql grafana


    【解决方案1】:

    只需将当前查询设为子查询即可。

    SELECT 
        T.*
    FROM
        (SELECT 
            Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as `Due Date`,
            device_serial as `Device Serial`,
            customer_name as `Customer`,
            error_code as `Error Code`,
            resolutiom as `Resolution`
        FROM preventive_maintenance
            -- ORDER BY `timestamp` desc
        LIMIT 25) AS T
    ORDER BY T.`Due Date`
    

    【讨论】:

    • 在 ORDER BY 中出现了问题,我希望最近的日子排在首位
    • @user829174 你的as 'due date' 在 sql 中不正确。字段名称必须封装在 ``not " 或 ' 中。请参阅编辑
    • 当复制/粘贴到 Grafana 时,我得到:错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 6 行的“客户,error_code 作为错误代码,resolutiom 作为“Resolutio”附近使用正确的语法
    • @user829174 在as customer 之后缺少一个`。你应该能够发现像这样的简单错误:)
    • 在工作台中粘贴时,结果显示效果很好。当粘贴到 grafana 结果的顺序不正确时......你有什么想法吗?
    【解决方案2】:
    Order By `Due Date` 
    

    需要工作。你试过了吗?如果没有,您可以使用子查询。

    SELECT * FROM 
    (
        SELECT 
          Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date',
          device_serial as "Device Serial",
          customer_name as "Customer",
          error_code as 'Error Code',
          resolutiom as 'Resolution'
        FROM preventive_maintenance
    ) T
    ORDER BY `Due Date`
    LIMIT 25
    

    示范

    SELECT * from (
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    union all 
    SELECT  Now() + INTERVAL FLOOR(RAND()*(1000-5+1)+5) DAY as 'Due Date' from dual
    ) T
    order by `Due Date`
    LIMIT 5
    
    |截止日期 | | :----------------- | | 2019-10-27 13:16:15 | | 2019-11-26 13:16:15 | | 2020-05-05 13:16:15 | | 2020-07-01 13:16:15 | | 2020-07-01 13:16:15 |

    db小提琴here

    【讨论】:

    • 在 ORDER BY 中出现了问题,我希望最近的日子排在首位
    • 是否可以创建示例小提琴来演示dbfiddle.uk 上的问题?
    • 它在小提琴中效果很好,我正在使用 Grafa,问题可能是“到期日期”是一个字符串吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2023-03-02
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多