質問するログイン新規登録

質問編集履歴

3

自分で試している微妙に実現できていないSQL文を掲載しました。

2025/10/07 03:19

投稿

Auxo
Auxo

スコア35

title CHANGED
File without changes
body CHANGED
@@ -38,13 +38,30 @@
38
38
 
39
39
  ### 試したこと・調べたこと
40
40
  - [x] teratailやGoogle等で検索した
41
- - [ ] ソースコードを自分なりに変更した
42
- - [ ] 知人に聞いた
43
- - [ ] その他
44
41
 
45
42
  ##### 上記の詳細・結果
46
43
  多くの場合で、登録されるデータとして必ず新しいものが後に登録される(idが大きい)ケースはあり、参考になるのですが、今回のように必ずしもidが大きなものが新しい日付でない場合は上手く取得できませんでした。
47
44
 
45
+ ### 試したSQL(微妙に上手くいっていないケース)
46
+
47
+ ```SQL
48
+ SELECT
49
+ `group_id`,
50
+ `id`,
51
+ MAX(registed) AS `latestDate`
52
+ FROM
53
+ `hoge`
54
+ WHERE
55
+ `registed` <= '2025-08-01'
56
+ GROUP BY
57
+ `group_id`
58
+ ;
59
+ ```
60
+
61
+ これですと2つ目のケースのグループ2が正常に新しいレコードが取得できません。
62
+ なお、MySQLでのSTRICT制約は外しています。
63
+
64
+
48
65
  ### 補足1
49
66
  元データの id:6の内容修正に伴い期待する取得結果も修正しました。
50
67
  閾値として設定された日付より前に登録されたデータの内、より後に登録されたものを取得したい為。

2

2つ目のケースの取得条件が誤っていたため修正(誤:閾値として「2025-09-01」/正:閾値として「2025-08-01」)しました。

2025/10/07 02:11

投稿

Auxo
Auxo

スコア35

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  > id:6の内容修正に伴い期待する取得結果も修正しました
25
25
 
26
- 日付の閾値として「2025-09-01」が指定された場合は以下のような結果を期待すます。
26
+ 日付の閾値として「2025-08-01」が指定された場合は以下のような結果を期待すます。
27
27
  |id|group_id|value_number|registed|
28
28
  |--:|--:|--:|--:|
29
29
  |5|1|14|2025-08-01|

1

元データの id:6の内容修正に伴い期待する取得結果も修正しました

2025/10/07 01:05

投稿

Auxo
Auxo

スコア35

title CHANGED
File without changes
body CHANGED
@@ -7,8 +7,10 @@
7
7
  |3|1|12|2025-10-01|
8
8
  |4|1|13|2025-08-01|
9
9
  |5|1|14|2025-08-01|
10
- |6|2|22|2025-10-01|
10
+ |6|2|22|2025-09-01|
11
11
 
12
+ > id:6のregistedを「2025-10-01」から「2025-09-01」に修正しました。
13
+
12
14
  指定された日付までの登録データの中で、グループ毎に最新の値が取得したいです。
13
15
  同一のグループで同一の日付に複数の登録がある場合は、後から登録されたもの(idが大きいもの)を取得したいと考えています。
14
16
  なお、登録は必ずしも日付順ではない為、idの大きいなものにより古い日付のデータが登録される事もあります。
@@ -17,8 +19,10 @@
17
19
  |id|group_id|value_number|registed|
18
20
  |--:|--:|--:|--:|
19
21
  |3|1|12|2025-10-01|
20
- |6|2|22|2025-10-01|
22
+ |6|2|22|2025-09-01|
21
23
 
24
+ > id:6の内容修正に伴い期待する取得結果も修正しました
25
+
22
26
  日付の閾値として「2025-09-01」が指定された場合は以下のような結果を期待すます。
23
27
  |id|group_id|value_number|registed|
24
28
  |--:|--:|--:|--:|
@@ -32,14 +36,6 @@
32
36
 
33
37
  何か良い方法はありますでしょうか。
34
38
 
35
-
36
-
37
- ### 該当のソースコード
38
-
39
- ```
40
- 特になし
41
- ```
42
-
43
39
  ### 試したこと・調べたこと
44
40
  - [x] teratailやGoogle等で検索した
45
41
  - [ ] ソースコードを自分なりに変更した
@@ -49,5 +45,6 @@
49
45
  ##### 上記の詳細・結果
50
46
  多くの場合で、登録されるデータとして必ず新しいものが後に登録される(idが大きい)ケースはあり、参考になるのですが、今回のように必ずしもidが大きなものが新しい日付でない場合は上手く取得できませんでした。
51
47
 
52
- ### 補足
48
+ ### 補足1
53
-
49
+ 元データの id:6の内容修正伴い期待する取得結果も修正ました。
50
+ 閾値として設定された日付より前に登録されたデータの内、より後に登録されたものを取得したい為。