有没有办法自动递增计数?

Is there a way to count auto-incrementally?

问题是:

获取播放量最多的5个播客,如果timeDuration > 29s(只取活跃歌曲)则每次收听都算在内。每 29 秒将计为 1 次,因此它将根据 PodcastID 进行计数。 1 个多集播客,1 个多集播客。 我认为我使用的 JOIN 条件错误,所以它无法得到我想要的。

这是我尝试过的:

SELECT TOP (5) E.ID,E.Name,R.PodcastID,
COUNT (R.PodcastID) TIMES
FROM (REPORT R JOIN EPISODE E ON R.PodcastID = E.PodcastID) JOIN 
PODCAST P ON P.ID = E.ID 
WHERE R.TimeDuration > 29 AND E.Status = 1
GROUP BY E.ID, E.Name,R.PodcastID
ORDER BY TIMES;

这是我创建的 3 个表:

--但是输出,在 TIMES 列,无论我做什么,它们都只算为 1,尽管我已经在上面设置了变量:58s、116s(表示 2、4 次)

这是我想要的结果,但是只得到top5,图中是6个结果,虽然我Select top(5)..

抱歉,我是 Whosebug 的新手,所以我展示问题和数据示例的方式可能有点难以理解。请原谅我。

如果我没理解错的话,报告行的意思是,有人听了播客中的音乐。该行包含以秒为单位的持续时间,您希望将其视为 29 秒的块数。因此,将持续时间除以 29 并使用它。

with listened as
(
  select
    id as id_podcast,
    sum(timeduration / 29) as times,
  from report1
  where timeduration > 29
  group by id
)
select top(5) with ties
  p.*, listened.times
from podcast p
join listened on listened.id_podcast = p.id
where  p.status = 1
order by listened.times desc;

你加入播客并报告他们的 ID 看起来很奇怪。报告的 ID 应标识报告而不是播客。好吧,我只是像你一样使用它,但创建了一个别名以使其可读。如果这只是您的错误,那么更正它就很容易了。

如果timeduration为整数,SQL服务器会顺便进行整数除法。如果您想使用分数,请除以 29.0 而不是除以 29。这可能会导致每个播客的总时长更高。

我正在使用 WITH TIES 子句,这在查找前 n 行时很常见。如果您想将其限制为五个结果行,您可能必须从完整的顶部列表中任意选择行,然后删除该子句。