- ベストアンサー
助けて下さい SQL
グーグルのビッグクエリで SQLを使ってます。 データ型の日付でmax関数を使って ユーザーの直近日を出したいのですが 直近日が上手く出ずにいます。 複数日でる状態です。 原因が分かりません。 直近日を出す方法を教えて下さい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> ユーザーごとの直近日を出したいのです。 ユーザーごとに直近日を出したのであれば、 金額(amount)も出しているのが ユーザーIDごとにグループ化することの邪魔をしています。 amountを外しましょう。 select max(deta)as deta,id from tableA group by id;
その他の回答 (6)
- ToOrisugaru
- ベストアンサー率28% (80/280)
ここを参考にするとできました。試してみてください https://lightgauge.net/database/sqlserver/1672/
- ToOrisugaru
- ベストアンサー率28% (80/280)
version 解りませんが、postgresですよね? 私の環境で同じことをすると、エラーになります。MAX関数はgroup byの集約として利用してください。とのメッセージです。 複数でるのは、別の項目を指定しているため、それぞれで日付が集約されずすべての日付(出力されている)が最大日付と認識され出力されているのではないかと推測されます。ためしに、select MAX(date) from tabelname だけで指定してみてください。おそらく1件のみ出力されるかと思います。 仮に、最大の1件のレコードのみ出力される場合には、日付をソートして プログラムにて最大のレコードを抽出しなければならないのかと思います。 参考に以下のurlでも同じようなことを実験してます。 http://pentan.info/sql/max_record.html
お礼
質問が足りなかったですね。すみません。 ユーザーごとの直近日を出したいのです。
補足
MAX関数はgroup by 書き損じてますが MAX関数はgroup byを使った上で 複数レコードが出てます。
- ToOrisugaru
- ベストアンサー率28% (80/280)
実際利用しているsqlとその結果、およびその付近のデータ(日付ソートしたもの)を提示してください。質問の内容が曖昧で答えられないと思います。
補足
tableAのカラム deta:日付 id:ユーザーid amount:金額 select max(deta)as deta, id, amount from tableA 結果 data| id|amount| 0303|1|1000 0304|1|200 0305|1|100 0302|2|1000 0303|2|500 と出ます
- aa5462
- ベストアンサー率40% (20/49)
複数件取得されてしまうのは何か原因があると思うのですが、 もう少し情報が欲しいです。 実際のSQLとか。
さらにorder by 日付項目A limit 1 と付け加えるとどうでしょう?
- aa5462
- ベストアンサー率40% (20/49)
一番単純なSQLであれば select max(日付項目A) from テーブルA これでテーブルAの日付項目Aの最大値が取得できます。
補足
それが出来ないから困っていて 原因が分からないんです。 複数レコードが出てくるんです。
お礼
ありがとうございます。 上手く出来ました。