Php 我想要特定月份+年份中所有玩家的最后一行
以下是我的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年后的几个月里没有参加比赛的球员。我在哪里添加日期选择? **编辑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 三千 基本上,我想要一
约翰·内斯托里亚克(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