我不确定这是如何正确调用的,所以我会尝试用一个例子来解释自己:
想象一下,在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:这是不的家庭作业。这是我面临的一个真实情况,但我还没有创建我的桌子,因为我不确定到目前为止最好的解决方案是什么。
答案 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表格方案,我可以提供更好的方法。