0

これがどのように適切に呼び出されるかわからないので、例を使って自分自身を説明しようとします。

2013年1月1日、学校に通い始めたと想像してみてくださいX。これをMySQLテーブルに入力します(例:次のように)。

user | day      | school
1    | 1.1.2013 | X

さて、2013年1月6日に、学校をに変更しYます。この事実を入力しましょう:

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

また、3回目は、学校を切り替えます。

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

さて、クエリ

2013年1月3日にどの学校に通っていましたか?

答えは次のとおりです。X

正しい答えを得るために、MySQLにそのようなクエリをどのように記述しますか?

注: MySQLのテーブル構造は、必要に応じて、私が提示したものとは異なる場合があります。
注2:これは宿題ではありません。これは私が直面している実際の状況ですが、これまでのところ最善の解決策がわからないため、まだテーブルを作成していません。

4

1 に答える 1

0

'day'列をDATE形式(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テーブルスキームを提供すれば、おそらくより良い方法を提供できます。

于 2013-03-25T15:02:16.060 に答える