質問編集履歴

2

補足記載

2019/07/04 00:34

投稿

Take_it
Take_it

スコア357

test CHANGED
File without changes
test CHANGED
@@ -49,3 +49,17 @@
49
49
  SELECT DATE_FORMAT(`date`, '%Y%m') as `ym`,DATE_FORMAT(`date`, '%Y') as `y`,DATE_FORMAT(`date`, '%m') as `m`,`date` from `calendar` WHERE `done` IS NULL group by DATE_FORMAT(`date`, '%Y%m')
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+ ######補足
56
+
57
+ table crender は、1日につき1レコードの行で、日数分存在します。
58
+
59
+ 休日か稼働日かの予定と、その日の分のデータが処理済みかどうかを判別するためのものです。
60
+
61
+ このテーブルへのINSERT処理は1日から末日までまとめて行われます。
62
+
63
+ (歯抜けにはならない)
64
+
65
+ 本件SQL文で意図するところは、「その月のカレンダーが生成済みかの判別」です。

1

tableのcreate文と問題のSQL文を追記。

2019/07/04 00:34

投稿

Take_it
Take_it

スコア357

test CHANGED
File without changes
test CHANGED
@@ -17,3 +17,35 @@
17
17
 
18
18
 
19
19
  教えて下さい。
20
+
21
+
22
+
23
+ ###追記
24
+
25
+ 質問としてはSQL文をどう直せばいいのかではなく、ONLY_FULL_GROUP_BYを未指定にするデメリットについてですが。。
26
+
27
+ (全く同じものを、MySQLのバージョンも同じ5.7.26の本件とは別のレンタルサーバーに置いて(ONLY_FULL_GROUP_BYを自分でいじれない)もエラーを吐かないことから、そっちはONLY_FULL_GROUP_BYがデフォルトで未指定になっていると思われるので、大したデメリットはないのでは?と思いますが・・・)
28
+
29
+
30
+
31
+ ```MySQL
32
+
33
+ CREATE TABLE `calendar` (
34
+
35
+ `date` date NOT NULL,
36
+
37
+ `working` smallint(5) UNSIGNED NOT NULL COMMENT '0=稼働日 1=休日 2=法定休日',
38
+
39
+ `fixed` int(11) DEFAULT NULL COMMENT '1=加工済み NULL=未加工,
40
+
41
+ `done` int(11) DEFAULT NULL COMMENT '1=処理済み NULL=未処理'
42
+
43
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
44
+
45
+
46
+
47
+
48
+
49
+ SELECT DATE_FORMAT(`date`, '%Y%m') as `ym`,DATE_FORMAT(`date`, '%Y') as `y`,DATE_FORMAT(`date`, '%m') as `m`,`date` from `calendar` WHERE `done` IS NULL group by DATE_FORMAT(`date`, '%Y%m')
50
+
51
+ ```