从MySQL选择“检查点”以后

时间:2013-03-25 14:52:47

标签: mysql

我不确定这是如何正确调用的,所以我会尝试用一个例子来解释自己:

想象一下,在2013年1月1日,你开始上学X。我们将其输入MySQL表,例如:

user | day      | school
1    | 1.1.2013 | X

现在,在2013年1月1日,您将学校更改为Y。让我们输入这个事实:

user | day      | school
1    | 1.1.2013 | X
1    | 1.6.2013 | Y

再次,你第三次转学:

user | day      | school
1    | 1.1.2013 | X
1    | 1.6.2013 | Y
1    | 4.3.2015 | Z

现在,查询

  

你在哪所学校参加1.3.2013?

答案是:X

我们如何向MySQL编写此类查询以获得正确的答案?

注意:如果需要,MySQL表结构可能与我提供的结构不同 注意2:这是的家庭作业。这是我面临的一个真实情况,但我还没有创建我的桌子,因为我不确定到目前为止最好的解决方案是什么。

1 个答案:

答案 0 :(得分:0)

为了正确存储DATE格式的“day”列 - yyyy-mm-dd,您可以对其进行排序。然后运行它。它将为您提供所选日期过去的所有日子(实际上只有最新的日期,因为LIMIT 1),当用户从最近的一个日期开始登记学校时。

SELECT * FROM {table_name} WHERE day <= '2013-03-01' ORDER BY day DESC LIMIT 1

在您的情况下,自 2013-01-01

以来,您将获得 1 上学

编辑:

如果您的expediture表包含日期(以DATE格式),您可以使用子查询。

SELECT e.*, (SELECT school FROM {table_name} WHERE day <= e.date ORDER BY day DESC LIMIT 1) AS school_attended
FROM expenditures e;

如果您提供expeditures表格方案,我可以提供更好的方法。