使用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)