为没有子查询的已知其他几列选择具有 MAX(column) 的一行

Select one row with MAX(column) for known other several columns without subquery(为没有子查询的已知其他几列选择具有 MAX(column) 的一行)
本文介绍了为没有子查询的已知其他几列选择具有 MAX(column) 的一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的表格包含用户对不同项目的投票.它有以下字段:

My table contains votes of users for different items. It has the following fields:

id, user_id, item_id, vote, utc_time

我了解如何为 #item# 获得 #user# 的最后一票,但它使用子查询:

I understand how to get the last vote of #user# for #item#, but it uses subquery:

    SELECT votes.*, items.name, items.price
        FROM votes JOIN items ON items.id = votes.item_id
        WHERE user_id = #user# AND item_id = #item#
            AND utc_time = (
                SELECT MAX(utc_time) FROM votes
                WHERE user_id = #user# AND item_id = #item#
            )

它有效,但对我来说看起来很愚蠢......应该有一种更优雅的方式来获得这个记录.我尝试了这里建议的方法,但我还不能让它工作,所以我会感谢你的帮助:如何在 SQL 中选择具有 MAX(列值)、DISTINCT 的行?

It works, but it looks quite stupid to me... There should be a more elegant way to get this one record. I tried the approach suggested here, but I cannot make it work yet, so I'll appreciate your help: How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?

这个问题还有第二部分:Count rows with DISTINCT(几列)和MAX(另一列)

There is a second part to this question: Count rows with DISTINCT(several columns) and MAX(another column)

推荐答案

您只需要结果中的一行,即具有 MAX(utc_time) 的行.在 MySQL 中,有一个 LIMIT 子句,您可以使用 ORDER BY:

You want just one row from the result, the one with MAX(utc_time). In MySQL, there is a LIMIT clause you can apply with ORDER BY:

SELECT votes.*, items.name, items.price
    FROM votes JOIN items ON items.id = votes.item_id
    WHERE user_id = #user# AND item_id = #item#
    ORDER BY votes.utc_time DESC
        LIMIT 1 ;

(user_id, item_id, utc_time)(item_id, user_id, utc_time) 上的索引会提高效率.

An index on either (user_id, item_id, utc_time) or (item_id, user_id, utc_time) will be good for efficiency.

这篇关于为没有子查询的已知其他几列选择具有 MAX(column) 的一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)