mysql - 如何在查询中重用派生值

标签 mysql

必须有一种更有效的方法来做到这一点,但我对 mySQL 还不够熟悉,还不知道要研究哪些术语。我一直在研究 AS 关键字。

下面是我的工作查询。看看我如何必须多次导出持续时间 (TIME_TO_SEC(TIMEDIFF( FinishTime,StartTime))。是否可以导出一次并在此查询中重用它?

table: AuraUsers
fields: ID, StartTime, FinishTime, Completed


SELECT 
    TIME_TO_SEC(
        TIMEDIFF(
            FinishTime,
            StartTime
        )
    ) 
    AS json 
    FROM AuraUsers 
    WHERE (
        StartTime IS NOT NULL 
        AND 
        FinishTime IS NOT NULL 
        AND 
        Completed=7 
        AND 
        TIME_TO_SEC(
            TIMEDIFF(
                FinishTime,
                StartTime
            )
        ) > 0 
        AND 
        TIME_TO_SEC(
            TIMEDIFF(
                FinishTime,
                StartTime
            )
        ) < 90275
    ) 
    ORDER BY TIME_TO_SEC(
        TIMEDIFF(
            FinishTime,
            StartTime
        )
    ) DESC 
    LIMIT 0,535;

最佳答案

使用HAVING子句,但它实际上并没有重用,每次在查询中使用别名时它都会评估整个表达式

SELECT 
    TIME_TO_SEC(
        TIMEDIFF(
            FinishTime,
            StartTime
        )
    ) 
    AS json 
    FROM AuraUsers 
    HAVING (
        StartTime IS NOT NULL 
        AND 
        FinishTime IS NOT NULL 
        AND Completed=7 
        AND json > 0 
        AND json < 90275
    ) 
    ORDER BY json DESC 
    LIMIT 0,535;

关于mysql - 如何在查询中重用派生值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942788/

相关文章:

php - 将 php 代码实现为 html 或仅使用 php 会更快吗?查看更多详情

php - 单击按钮时截断表

具有 MySQL 数据库和部署的 C# 应用程序

mysql - 使用普通的 java 类来处理与 servlet 的数据库连接是否可以?

mysql - SQL 组合 or,and 查询

mysql - 在ubuntu ec2实例中拒绝访问用户时如何重置root密码

php - 如何使dojo数据网格具有可编辑的行数据、可排序和分页

c# - 如何在 C# 中序列化-反序列化 DigitalPersona u.ere.u 4500 的指纹并保存到数据库

mysql - 请问为什么 "ERROR 1235 (42000): This version of MySQL doesn' t还不支持 'LIMIT & IN/ALL/ANY/SOME subquery'”?

mysql - 查询更新问题