![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
社員の中で直近の1ヶ月に誕生日を迎える社員を抽出し近い日付から順番に表示したいと思っています。
以前ご教示頂いたコードで出来たのですが、少しおかしい点が見つかりました。
現在では下記のように正常に表示されます。
3月2日 山田
3月15日 菊池
3月22日 田中
しかし、実際に山田の誕生日である当日(3月2日)になると、山田のデータは一番下に表示されてしまいます。
3月15日 菊池
3月22日 田中
3月2日 山田
コードは下記のようになっています。
$stmd = date('m/d');
$endmd = date('m/d', strtotime('+1month'));
$join = $stmd < $endmd ? 'and' : 'or';
$sql="SELECT office.*, (case when date_format(birth, '%m/%d') <= ? then 1 else 0 end) as sw FROM office where date_format(birth, '%m/%d') >= ? " . $join . " date_format(birth, '%m/%d') <= ? order by sw, date_format(birth, '%m/%d')";
これはどのようにすれば当日になっても順番どおりに表示させることが出来るでしょうか?
ご存知の方いらっしゃいましたらご教示ください。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>直近の1ヶ月に誕生日を迎える
の定義次第ですね
・今月と誕生月が一緒の場合、今日の日付が誕生日の日付より小さい
・来月と誕生月が一緒の場合、今日の日付が誕生日の日付と同じか大きい
ということでよければ、こんな感じ?
(過去1カ月も取りたいとなるともうちょい工夫が必要)
//元データ
create table office (birth date,name varchar(20));
insert into office values('1960-03-02','山田'),('1970-03-15','菊池'),('1980-03-22','田中');
//今日が2014-02-10の場合
SELECT office.* from office
where month(@d:='2014-02-10')=month(birth) and day(@d)<day(birth)
or month(@d)+1=month(birth) and day(@d)>=day(birth)
order by birth asc;
→山田
//今日が2014-02-28の場合
SELECT office.* from office
where month(@d:='2014-02-10')=month(birth) and day(@d)<day(birth)
or month(@d)+1=month(birth) and day(@d)>=day(birth)
order by birth asc;
→山田、菊池、田中
//今日が2014-03-02の場合
SELECT office.* from office
where month(@d:='2014-02-10')=month(birth) and day(@d)<day(birth)
or month(@d)+1=month(birth) and day(@d)>=day(birth)
order by birth asc;
→菊池、田中
//今日を調整しない
SELECT office.* from office
where month(@d:=curdate())=month(birth) and day(@d)<day(birth)
or month(@d)+1=month(birth) and day(@d)>=day(birth)
order by birth asc;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/12/22 17:29
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
SQL文を教えてください。
-
複数のテーブルから値を合計出...
-
mysqlでunixtimeによる日付範囲...
-
日付検索で0001-01-01 00:00:00...
-
SQLで、同じ値が何回連続す...
-
下記の問合せを行うクエリを、 ...
-
MySQLで特定のグループの上位3...
-
SQL 重複しないJoinの仕方を教...
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
2つの列が同じ値の行を取得するSQL
-
AccessのSQL文で1件のみヒット...
-
データ
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
SELECT FOR UPDATE で該当レコ...
-
group byの並び順を変えるだけ...
-
Oracleで「文字が無効です」の...
-
トランザクションログを出力せ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
<SQL>重複しているデータの場合...
-
SQLです教えてくださいお願いし...
-
SQLです。下記の問合せを行うク...
-
下記の問合せを行うクエリを、 ...
-
SQL 重複しないJoinの仕方を教...
-
最新の日付と2番目の日付のデー...
-
mysqlに格納されている日付のデ...
-
DISTINCTROWについてです。
-
SQLで、同じ値が何回連続す...
-
直近1ヶ月に誕生日を迎える社員...
-
NULLは表示順最下位
-
MySQLで日付(date)型のdefaul...
-
MySQLで特定のグループの上位3...
-
MySQLのdatetime型に0月0日を格納
-
「8月の第3土日」をデータベ...
-
型変換
-
日付検索で0001-01-01 00:00:00...
-
Mysqlで最新の日付を持つデータ...
-
NULLの値ってupdateで評価され...
おすすめ情報