我目前正试图将一些数据拉入表中但我只想显示某一行,如果它包含列中的最高数量。
+----+--------+---------+---------+----------+-----+
| id | auc_id | user_id | bamount | date | out |
+----+--------+---------+---------+----------+-----+
| 20 | 10002 | 10008 | 12 |1342445619| 1 |
| 21 | 10002 | 10009 | 14 |1342445667| 1 |
| 22 | 10002 | 10008 | 16 |1342445669| 0 |
+----+--------+---------+---------+----------+-----+
我想在表中显示每个auc_id的每个user_id的最新行
所以auc_id 10002用户10008的用户只会在表中显示16位的bamount而忽略12行的bamount,因为12小于16
这可能吗?
答案 0 :(得分:2)
是的,可以显示与每个用户的最高出价相对应的行。
首先做@Bryan Moyles建议的事情;用户总结您的出价。
SELECT user_id, MAX(bamount) bamount
FROM table_name
GROUP BY user_id
现在您知道每个用户的最高出价。接下来,您需要通过将原始表连接到摘要来检索整行。
SELECT t.id, t.auc_id, t.user_id, t.bamount, t.date, t.out
FROM table_name t
INNER JOIN (
SELECT user_id, MAX(bamount) bamount
FROM table_name
GROUP BY user_id
) m ON t.user_id = m.user_id AND t.bamount = m.bamount
这几乎是正确的。但是,如果您的用户在两次不同的拍卖中出价相同,那么您将为该用户获得两行。您的问题没有说明您需要对此特定边缘情况执行的操作。
这个怎么样?在两个出价金额相同的情况下,让我们为用户提供最新的(即,具有最大数字ID的那个)出价。因此,我们需要另一个摘要查询,如此。
SELECT w.user_id, MAX(w.id) id
FROM table_name w
INNER JOIN (
SELECT user_id, MAX(bamount) bamount
FROM table_name
GROUP BY user_id
) x ON w.user_id = x.user_id AND w.bamount = x.bamount
GROUP BY w.user_id
现在您将该查询加入到您的原始表中,并且,看,你已经完成了。不要忘记在整个查询中使用适当的ORDER BY子句。
这假定id是主键唯一列。
SELECT t.id, t.auc_id, t.user_id, t.bamount, t.date, t.out
FROM table_name t
INNER JOIN (
SELECT w.user_id, MAX(w.id) id
FROM table_name w
INNER JOIN (
SELECT user_id, MAX(bamount) bamount
FROM table_name
GROUP BY user_id
) x ON w.user_id = x.user_id AND w.bamount = x.bamount
GROUP BY w.user_id
) m ON t.id = m.id
看看怎么样?总结发现用户的最大数字出价。它嵌套在一个摘要中,该摘要可以找到每个用户的最大ID号。反过来,它用于从原始表中选择所需的行。
通过利用比您在问题中给出的更好地理解数据,可能有更简单的方法来解决这个问题。例如,如果您知道出价总是增加,并且没有两个出价具有相同的日期,并且您不关心如果用户在多个出价上进行正确的竞价,那么您可以通过日期字段。但是,根据我的经验,最好避免依赖关于数据的假设(比如出价总是在增加),因为事情在现实生活中会变得蠢蠢欲动。
答案 1 :(得分:0)
使用MAX函数获取最高bamount
SELECT user_id, MAX(bamount) FROM table_name GROUP BY user_id
答案 2 :(得分:0)
select * from table1 t
where auction_date = (select max(auction_date) from table1 where
user_id = a.user_id and auc_id = a.auc_id)
您的索引顺序为:Auction_date,user_id,auc_id。 Aution_date应该是索引中的列。