【问题标题】:SQL query to find the most recent timestamp for several ID's用于查找多个 ID 的最新时间戳的 SQL 查询
【发布时间】:2015-11-11 16:30:59
【问题描述】:

我正在尝试运行一个查询,该查询返回特定用户组执行的最后一个“游戏”或操作。我不得不加入几张桌子才能最终得到我想要的东西,但这基本上现在返回了每个用户的游戏。我想参加他们的最后一场比赛。我在查询中将 max(___) 添加到时间戳,但它最终只返回了最近玩过的游戏,仅此而已。理想情况下,我希望看到每个用户及其最后的操作。

SELECT teamName, test_teams.userID, test_teams.timestamp AS signup, sponsorship, test_results.timestamp, stadium, win+draw+lose AS games 
    FROM test_teams 
INNER JOIN test_profile
    ON test_teams.userID = test_profile.userID
INNER JOIN test_results
    ON test_teams.userID = test_results.homeTeamId
WHERE test_teams.timestamp >= '2015-11-04 00:00:00' and win+draw+lose > 100
ORDER BY games desc;

【问题讨论】:

  • 你用的是什么关系型数据库?

标签: sql join max inner-join


【解决方案1】:

以下 SQL 语句为您提供每个团队的最新时间戳/操作:

SELECT MAX(timestamp) as latestTimestamp, homeTeamId
  FROM test_results
  GROUP BY homeTeamId

它可以与其他2张表连接

SELECT teamName, tt.userID, tt.timestamp AS signup, sponsorship, tr.latestTimestamp, stadium, win+draw+lose AS games 
FROM test_teams tt
INNER JOIN test_profile
  ON test_teams.userID = test_profile.userID
INNER JOIN (
  SELECT MAX(timestamp) as latestTimestamp, homeTeamId
  FROM test_results
  GROUP BY homeTeamId) tr 
  ON test_teams.userID = tr.homeTeamId 

【讨论】:

  • 谢谢!一个问题 - 在第 2 行它说“FROM test_teams tt” - 这里有点困惑!以及倒数第二行,上面写着“GROUP BY homeTeamId) tr” - 我假设您已经将 tr 缩写为 test_results 并将 tt 缩写为 test_teams?
  • 是的,正确的。这是一个标准的 SQL 功能w3schools.com/sql/sql_alias.asp
  • 再次感谢伙计!不多说,但肯定是我写过的最酷的查询……嗯,尝试写,得到帮助,并成功执行!
猜你喜欢
  • 2020-11-02
  • 2013-03-31
  • 2014-03-02
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多