Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL从MySQL数据库结果集中选择最近的周围行(上/下)_Mysql_Sql_Database - Fatal编程技术网

使用SQL从MySQL数据库结果集中选择最近的周围行(上/下)

使用SQL从MySQL数据库结果集中选择最近的周围行(上/下),mysql,sql,database,Mysql,Sql,Database,我试图检索结果集中与特定条件匹配的记录上方和下方最近的相邻行 我的问题似乎是在这里使用最小值和最大值: WHERE ma_c.id = 2 AND ma_e.id > 4 AND ma_e.id = MIN(ma_e.id)) 我收到的错误是: 错误:组函数的使用无效 我不太清楚我做错了什么 (SELECT ma_c.id as contest_id,

我试图检索结果集中与特定条件匹配的记录上方和下方最近的相邻行

我的问题似乎是在这里使用最小值和最大值:

WHERE   ma_c.id = 2 
            AND ma_e.id > 4 
            AND ma_e.id = MIN(ma_e.id))
我收到的错误是: 错误:组函数的使用无效

我不太清楚我做错了什么

    (SELECT     
        ma_c.id                 as contest_id,
        ma_c.name               as name,
        ma_c.title              as title,
        ma_u.id                 as user_id,
        ma_u.first_name         as user_first_name,
        ma_u.last_name          as user_last_name,
        ma_u.street_address     as user_street_address,
        ma_u.city               as user_city,
        ma_u.zip_code           as user_zip_code,
        ma_u.email              as user_email,
        ma_u.phone_number       as user_phone_number,
        ma_u.country_code       as user_country_code,
        ma_u.gender             as user_gender,
        ma_u.dob                as user_dob,
        ma_u.ssn                as user_ssn,
        ma_u.canadian_province  as user_canadian_province,
        ma_u.state              as user_state,
        ma_e.id                 as entry_id,
        ma_e.hash_id            as entry_hash_id,
        ma_e.create_datetime    as entry_create_datetime,
        ma_e.entry_type         as entry_type,
        ma_e.title              as entry_title
    FROM    ma_contests ma_c
    JOIN    ma_users ma_u
    ON      ma_c.id = ma_u.contests_id

    JOIN    ma_entries ma_e
    ON      ma_u.id = ma_e.users_id

    WHERE   ma_c.id = 2 
            AND ma_e.id > 4 
            AND ma_e.id = MIN(ma_e.id))
联合

---编辑-- 这是我试图执行的查询的相关模式uml

MAX是一个聚合函数,基本上是一个查找一组行并为每个分组元素提供单个答案的函数

如果您想从ma_entries表中了解最小值或最大值,则需要添加以下连接:

JOIN    ma_entries ma_e     ON      ma_u.id = ma_e.users_id      
JOIN (select min(id) as SmallestID FROM ma_entries) xx ON 1=1

WHERE   ma_c.id = 2             
        AND ma_e.id > 4             
        AND ma_e.id = xx.SmallestID
您可以对最大id使用类似的方法

然而,我不认为WHERE子句是正确的,因为您要求的是ID高于特定值且=特定值的行。我建议重新考虑一下where条款

SELECT     
        ma_c.id                 as contest_id,
        ma_c.name               as name,
        ma_c.title              as title,
        ma_u.id                 as user_id,
        ma_u.first_name         as user_first_name,
        ma_u.last_name          as user_last_name,
        ma_u.street_address     as user_street_address,
        ma_u.city               as user_city,
        ma_u.zip_code           as user_zip_code,
        ma_u.email              as user_email,
        ma_u.phone_number       as user_phone_number,
        ma_u.country_code       as user_country_code,
        ma_u.gender             as user_gender,
        ma_u.dob                as user_dob,
        ma_u.ssn                as user_ssn,
        ma_u.canadian_province  as user_canadian_province,
        ma_u.state              as user_state,
        ma_e.id                 as entry_id,
        ma_e.hash_id            as entry_hash_id,
        ma_e.create_datetime    as entry_create_datetime,
        ma_e.entry_type         as entry_type,
        ma_e.title              as entry_title
    FROM    ma_contests ma_c
    JOIN    ma_users ma_u
    ON      ma_c.id = ma_u.contests_id

    JOIN    ma_entries ma_e
    ON      ma_u.id = ma_e.users_id

    WHERE   ma_c.id = 2 
            AND ma_e.id > 4 
            AND ma_e.id = (SELECT min(_ma_e.id)       
                            FROM    ma_contests _ma_c
                            JOIN    ma_users _ma_u
                            ON      _ma_c.id = _ma_u.contests_id

                            JOIN    ma_entries _ma_e
                            ON      _ma_u.id = _ma_e.users_id

                            WHERE   _ma_c.id = 2 
                                    AND _ma_e.id > 4)
对于下一个查询也是如此

SELECT     
        ma_c.id                 as contest_id,
        ma_c.name               as name,
        ma_c.title              as title,
        ma_u.id                 as user_id,
        ma_u.first_name         as user_first_name,
        ma_u.last_name          as user_last_name,
        ma_u.street_address     as user_street_address,
        ma_u.city               as user_city,
        ma_u.zip_code           as user_zip_code,
        ma_u.email              as user_email,
        ma_u.phone_number       as user_phone_number,
        ma_u.country_code       as user_country_code,
        ma_u.gender             as user_gender,
        ma_u.dob                as user_dob,
        ma_u.ssn                as user_ssn,
        ma_u.canadian_province  as user_canadian_province,
        ma_u.state              as user_state,
        ma_e.id                 as entry_id,
        ma_e.hash_id            as entry_hash_id,
        ma_e.create_datetime    as entry_create_datetime,
        ma_e.entry_type         as entry_type,
        ma_e.title              as entry_title
    FROM    ma_contests ma_c
    JOIN    ma_users ma_u
    ON      ma_c.id = ma_u.contests_id

    JOIN    ma_entries ma_e
    ON      ma_u.id = ma_e.users_id

    WHERE   ma_c.id = 2 
            AND ma_e.id > 4 
            AND ma_e.id = (SELECT min(_ma_e.id)       
                            FROM    ma_contests _ma_c
                            JOIN    ma_users _ma_u
                            ON      _ma_c.id = _ma_u.contests_id

                            JOIN    ma_entries _ma_e
                            ON      _ma_u.id = _ma_e.users_id

                            WHERE   _ma_c.id = 2 
                                    AND _ma_e.id > 4)