Mysql 如何创建SQL查询以获取比较两列的值较高的所有项

Mysql 如何创建SQL查询以获取比较两列的值较高的所有项,mysql,sql,Mysql,Sql,我的mysql架构中有一个表: id | user_id | cellphone_id | favorited_at | unfavorited_at 1 | 234 | 7 | 2019-04-09 12:35:02 | 2 | 234 | 5 | 2019-04-09 13:00:02 | 4 | 2

我的mysql架构中有一个表:

   id    | user_id    | cellphone_id    |    favorited_at        | unfavorited_at
    1    |   234      |     7           |   2019-04-09 12:35:02  |    
    2    |   234      |     5           |   2019-04-09 13:00:02  |
    4    |   234      |     7           |   2019-04-09 12:35:02  | 2019-04-10 12:35:02
此表表示应用程序用户喜爱的所有手机的历史记录

在上面的例子中,手机识别号7在2019-04-09是最受欢迎的,而在2019-04-10是最不受欢迎的

因此,我想建立一个查询,选择用户目前最喜欢的所有手机,因此当我运行查询时,结果应该是这样的:

 SELECT * FROM favorite_user_cellphone
 WHERE user_id = 234 AND <something.....>

应仅返回手机id 5,因为手机id 7受欢迎,但不受欢迎。

对于单个用户,我认为您可以使用订购方式和限制:

您可以使用不存在的查询:

使用它


选择*从favorite_user_手机,其中user_id=234,NOT在选择手机id从favorite_手机,其中user_id=234,unfavorite_at不为空

伙计,你对存在的查询非常着迷。但这里有一个更新投票。但我需要保留用户何时喜欢和何时不喜欢手机的历史记录。@andre第4行包含这两个日期。。。实际上,您可以填写第1行中的两列,而不创建第4行是的,我理解,但假设应用程序用户再次喜欢该设备?我将失去他最喜欢的第一次约会的历史。
   id    | user_id    | cellphone_id    |    favorited_at        | unfavorited_at  
    2    |   234      |     5           |   2019-04-09 13:00:02  |
SELECT uc.*
FROM favorite_user_cellphone uc
WHERE user_id = 234 AND <something.....>
ORDER BY favorited_at DESC
LIMIT 1;
SELECT *
FROM t
WHERE unfavorited_at IS NULL
AND NOT EXISTS (
    -- t is a favorited record
    -- x is an unfavorited record that is more recent than t
    SELECT 1
    FROM t AS x
    WHERE user_id        = t.user_id
    AND   cellphone_id   = t.cellphone_id
    AND   unfavorited_at > t.favorited_at
)
Select * from 
favorite_user_cellphone uc
where user_id = 234 and favorited_at is not null And cellphone_id  not in 
(
Select cellphone_id  from 
favorite_user_cellphone uc
where user_id = 234 and unfavorited_at is not null)