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

时间:2019-04-12 13:24:58

标签: 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    |   234      |     7           |   2019-04-09 12:35:02  | 2019-04-10 12:35:02

此表代表应用程序用户喜爱的所有手机的历史记录。

在上面的示例中,phones_id 7在2019-04-09时最受欢迎,而在2019-04-10则不受欢迎。

所以我现在想构建一个查询来选择所有用户喜欢的手机,所以当我运行查询时,结果应该是这样的:

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

结果应该是:

   id    | user_id    | cellphone_id    |    favorited_at        | unfavorited_at  
    2    |   234      |     5           |   2019-04-09 13:00:02  |

应该只返回mobile_id 5,因为mobile_id 7是最喜欢的,而不是最喜欢的。

4 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS查询:

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
)

答案 1 :(得分:0)

对于单个用户,我认为您可以使用order bylimit

SELECT uc.*
FROM favorite_user_cellphone uc
WHERE user_id = 234 AND <something.....>
ORDER BY favorited_at DESC
LIMIT 1;

答案 2 :(得分:0)

--interactive

答案 3 :(得分:0)

使用

选择*从“ favourite_user_cell_phone”中的user_id = 234而不能进入(从“ favourite_user_cellphone”中的SELECTphone_id = 234,而unfavorited_at不为null)