Mysql 如何创建SQL查询以获取比较两列的值较高的所有项
我的mysql架构中有一个表: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
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)