回答編集履歴

1

追記

2018/12/18 05:17

投稿

takotakot
takotakot

スコア1111

test CHANGED
@@ -29,3 +29,113 @@
29
29
 
30
30
 
31
31
  と表記できるはずです。もしうまくいって時間が変わらないのであれば、冗長な記述は少し減らせますね。
32
+
33
+
34
+
35
+
36
+
37
+ 案1
38
+
39
+
40
+
41
+ ```SQL
42
+
43
+ SELECT orders.* FROM orders
44
+
45
+ WHERE is_deleted = 0
46
+
47
+ AND customer_id = 2
48
+
49
+ AND NOT EXISTS(
50
+
51
+ SELECT 1 FROM orders duplicated
52
+
53
+ WHERE 2 = duplicated.customer_id
54
+
55
+ AND duplicated.is_deleted = 0
56
+
57
+ AND orders.id != duplicated.id
58
+
59
+ AND orders.voucher_no1 IN(duplicated.voucher_no1, duplicated.voucher_no2)
60
+
61
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
62
+
63
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
64
+
65
+ )
66
+
67
+ AND NOT EXISTS(
68
+
69
+ SELECT 1 FROM orders duplicated
70
+
71
+ WHERE 2 = duplicated.customer_id
72
+
73
+ AND duplicated.is_deleted = 0
74
+
75
+ AND orders.id != duplicated.id
76
+
77
+ AND orders.voucher_no2 IN(duplicated.voucher_no1, duplicated.voucher_no2)
78
+
79
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
80
+
81
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
82
+
83
+ )
84
+
85
+ ;
86
+
87
+ ```
88
+
89
+
90
+
91
+ 案2
92
+
93
+
94
+
95
+ ```SQL
96
+
97
+ SELECT orders.* FROM orders
98
+
99
+ WHERE is_deleted = 0
100
+
101
+ AND customer_id = 2
102
+
103
+ AND NOT EXISTS(
104
+
105
+ SELECT 1 FROM orders duplicated
106
+
107
+ WHERE 2 = duplicated.customer_id
108
+
109
+ AND duplicated.is_deleted = 0
110
+
111
+ AND orders.id != duplicated.id
112
+
113
+ AND duplicated.voucher_no1 IN(orders.voucher_no1, orders.voucher_no2)
114
+
115
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
116
+
117
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
118
+
119
+ )
120
+
121
+ AND NOT EXISTS(
122
+
123
+ SELECT 1 FROM orders duplicated
124
+
125
+ WHERE 2 = duplicated.customer_id
126
+
127
+ AND duplicated.is_deleted = 0
128
+
129
+ AND orders.id != duplicated.id
130
+
131
+ AND duplicated.voucher_no2 IN(orders.voucher_no1, orders.voucher_no2)
132
+
133
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
134
+
135
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
136
+
137
+ )
138
+
139
+ ;
140
+
141
+ ```