------------------------- | ID | RID | DATE | // TABLE A ------------------------- | 1 | 1 | 2015-01-01 | // 1st edition | 2 | 2 | 2015-01-01 | // 1st edition | 3 | 1 | 2015-02-01 | // 2nd edition | 4 | 4 | 2015-01-01 | // 1st edition | 5 | 1 | 2015-05-01 | // 3rd edition | 6 | 6 | 2015-01-01 | // 1st edition | 7 | 6 | 2015-01-10 | // 3rd edition | 8 | 6 | 2015-01-12 | // 4th edition | 9 | 6 | 2015-01-02 | // 2nd edition -------------------------
表A包含描述“文件版本”的记录。至今, 我已经能够生成一个将要选择的SELECT语句 最新版本:
SELECT `t1`.`id` AS `id`, `t1`.`rid` AS `rid`, `t1`.`date` AS `date` FROM `table_a` `t1` WHERE (`t1`.`date` = ( SELECT MAX(`t2`.`date`) FROM `table_a` `t2` WHERE (`t2`.`rid` = `t1`.`rid`) ))
这给了我这样的东西:
------------------------- | ID | RID | DATE | // TABLE B ------------------------- | 2 | 2 | 2015-01-01 | // 1st edition | 4 | 4 | 2015-01-01 | // 1st edition | 5 | 1 | 2015-05-01 | // 3rd edition | 8 | 6 | 2015-01-12 | // 4th edition -------------------------
但我的问题是,如何调整SELECT语句以便我获得特定日期的所有最新版本?比如说我 想要找到2015-01-11的最新版本?我想得到一个类似于表C的结果:
------------------------- | ID | RID | DATE | // TABLE C ------------------------- | 1 | 1 | 2015-01-01 | // 1st edition | 2 | 2 | 2015-01-01 | // 1st edition | 4 | 4 | 2015-01-01 | // 1st edition | 7 | 6 | 2015-01-10 | // 3rd edition -------------------------
如果已经有解决方案,我提前道歉但我尝试使用这些关键字/短语进行搜索:“mysql选择截至日期的最新版本”并且到目前为止找不到任何帮助......
此外,我意识到我可能会过度思考这个问题,这可能是一个非常简单的调整,例如修改SELECT MAX或向第二个WHERE子句添加另一个条件。
由于
更新:感谢穆萨,我需要分步思考一下;一种不同的方法。第一步需要选择所有日期< = 2015-01-11。第二步是过滤掉ID = RID(即最新版本)的MAX(日期)。至于将两个SELECT语句合并在一起,我遇到了一些困难。
答案 0 :(得分:1)
我认为你可以这样做:
SELECT
`t1`.`id` AS `id`,
`t1`.`rid` AS `rid`,
`t1`.`date` AS `date`
FROM `table_a` `t1`
WHERE
`t1`.`date` = (
SELECT MAX(`t2`.`date`)
FROM `table_a` `t2`
WHERE (`t2`.`rid` = `t1`.`rid`)
)
and `t1`.`date` <= '2015-01-11' # I have added this line
您希望最新版本小于或等于其他日期(2015-01-11此处),因此我认为您可以通过在AND
子句中添加WHERE
部分来获取它。您的查询的其余部分是相同的。