![](/img/trans.png)
[英]How to select just one id from a set of repetitive records in SQL and select only one of the corresponding values
[英]Select corresponding records from another table, but just the last one
我有2个表authors
和authors_sales
该表authors_sales
每小时都会更新,因此非常大。
我需要创建一个排名,为此我需要将两个表都authors_sales
在一起( authors
拥有所有作者数据,而authors_sales
仅具有销售数字)
如何根据作者按销售顺序排列最终排名表?
公用密钥为: authorId
我尝试了LEFT JOIN,但是我一定做错了,因为我得到了所有authors_sales
表,而不仅仅是最后一个。
朝正确方向的任何提示都值得赞赏
如果要查找销售的汇总数据,则需要按authorId分组以合并表。 就像是...
select authors.author_id, SUM(author_sales.sale_amt) as total_sales
from authors
inner join author_sales on author_sales.author_id = authors.author_id
group by authors.author_id
order by total_sales desc
但是(如果您是上述情况还是下一个情况,我无法区分您的问题),如果您仅查找author_sales表的最大值(如果该表中的数据已经聚合),则可以加入一个对author_sales的嵌套查询,例如...
select author.author_id, t.sales from authors
inner join
(select top 1 author_sales.author_id,
author_sales.sale_amt,
author_sales.some_identifier
from author_sales order by some_identifier desc) t
on t.author_id = author.author_id
order by t.sales desc
some_identifier将是您如何确定哪条记录是author_sales的最新记录,无论是插入记录的时间戳还是增加的主键(但是已设置)。 取决于author_sales中的数据是否已经聚合,这两个之一应该为您完成...
select a.*, sum(b.sales)
from authors as a
inner join authors_sales as b
using authorId
group by b.authorId
order by sum(b.sales) desc;
/* assuming column sales = total for each row in authors_sales */
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.