Php 我想要特定月份+年份中所有玩家的最后一行

Php 我想要特定月份+年份中所有玩家的最后一行,php,sql,join,left-join,greatest-n-per-group,Php,Sql,Join,Left Join,Greatest N Per Group,以下是我的sql表的简化版本,按日期排序,共2个月: 玩家id| 日期| 分数 12011-05-25 1200 22011-05-25 3400 32011-05-26 3200 42011-05-26 4400 12011-05-28 1000 22011-05-28 2000 32011-05-29 3000 42011-05-29 4000 12011-06-24 1300 22011-06-24 2500 32011-06-24 5000 42011-06-24 三千 基本上,我想要一

以下是我的sql表的简化版本,按日期排序,共2个月:

玩家id| 日期| 分数 12011-05-25 1200 22011-05-25 3400 32011-05-26 3200 42011-05-26 4400 12011-05-28 1000 22011-05-28 2000 32011-05-29 3000 42011-05-29 4000 12011-06-24 1300 22011-06-24 2500 32011-06-24 5000 42011-06-24 三千

基本上,我想要一个显示特定月份/特定年份中所有玩家最后得分的查询

例如:

如果我想要05个月内所有球员的最终得分,请给出结果 将是: 12011-05-281000 22011-05-282000 32011-05-293000 42011-05-294000

到目前为止,我的sql查询:

这似乎并没有显示所有的球员,只有在05年后的几个月里没有参加比赛的球员。我在哪里添加日期选择?

**编辑
约翰·内斯托里亚克(John Nestoriak)的回答贝娄帮了我的忙:

我想他指的是这里展示的技术:

另外一个限制是,他不想要最后一张唱片,而是想要给定月份的最后一张唱片

奇怪的是,您必须两次提供附加约束,一次是在连接条件中,另一次是过滤结果。这应该对你有用

SELECT m1.* FROM table m1 
  LEFT JOIN table m2 ON 
    (m1.player_id = m2.player_id AND m1.date < m2.date 
     AND m2.date < '2011-06-01') 
  WHERE m2.date IS NULL AND month(m1.date) = 5 AND year(m1.date) = 2011
假设玩家id、日期组合唯一:

SELECT 
      t.*
FROM 
      TableX AS t
  JOIN
      ( SELECT 
              player_id
            , MAX(date) AS maxDate
        FROM
            TableX
        WHERE 
             date BETWEEN '2011-05-01'
                      AND LAST_DAY('2011-05-01')
        GROUP BY
              player_id
      ) AS tg
    ON  
      (tg.player_id, tg.maxDate) = (t.player_id, t.date)
ORDER BY 
      t.score DESC

我不确定我是否理解,您要加入的两个表是什么?您只解释了1个表。@cha0site他是自己加入表的。我想你可能只需要改变你的想法。试着记住,但我相信你想要第一张桌子上的最大值。这能回答你的问题吗?
SELECT 
      t.*
FROM 
      TableX AS t
  JOIN
      ( SELECT 
              player_id
            , MAX(date) AS maxDate
        FROM
            TableX
        WHERE 
             date BETWEEN '2011-05-01'
                      AND LAST_DAY('2011-05-01')
        GROUP BY
              player_id
      ) AS tg
    ON  
      (tg.player_id, tg.maxDate) = (t.player_id, t.date)
ORDER BY 
      t.score DESC