这就是我所说的“最大的每组”问题。每周在StackOverflow上出现几次。
我使用外部联接技术解决了这类问题:
SELECt s1.*, s1.wins / s1.losses AS win_loss_ratioFROM Scrape s1LEFT OUTER JOIN Scrape s2 ON (s1.username = s2.username AND s1.ScrapeDate < s2.ScrapeDate)WHERe s2.username IS NULLORDER BY win_loss_ratio DESC;
每个用户名仅返回一行-列中值最大的
ScrapeDate行。这就是外部联接的作用, 试图
与
s1具有
s2相同用户名和更大日期的其他行匹配。如果没有这样的行,则外部联接将为的所有列返回NULL
s2,然后我们知道
s1对应于该给定用户名具有最大日期的行。
当您正在进行部分完成的抓取时,这也应该起作用。
该技术不一定像其他答案给出的CTE和RANKING解决方案一样快。您应该同时尝试这两种方法,然后看看哪种方法更适合您。我之所以喜欢我的解决方案,是因为它可以在任何SQL版本中使用。



