• ベストアンサー

助けて下さい SQL

グーグルのビッグクエリで SQLを使ってます。 データ型の日付でmax関数を使って ユーザーの直近日を出したいのですが 直近日が上手く出ずにいます。 複数日でる状態です。 原因が分かりません。 直近日を出す方法を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

> ユーザーごとの直近日を出したいのです。 ユーザーごとに直近日を出したのであれば、 金額(amount)も出しているのが ユーザーIDごとにグループ化することの邪魔をしています。 amountを外しましょう。 select max(deta)as deta,id from tableA group by id;

putiabu
質問者

お礼

ありがとうございます。 上手く出来ました。

その他の回答 (6)

回答No.7

ここを参考にするとできました。試してみてください https://lightgauge.net/database/sqlserver/1672/

回答No.5

version 解りませんが、postgresですよね? 私の環境で同じことをすると、エラーになります。MAX関数はgroup byの集約として利用してください。とのメッセージです。 複数でるのは、別の項目を指定しているため、それぞれで日付が集約されずすべての日付(出力されている)が最大日付と認識され出力されているのではないかと推測されます。ためしに、select MAX(date) from tabelname だけで指定してみてください。おそらく1件のみ出力されるかと思います。 仮に、最大の1件のレコードのみ出力される場合には、日付をソートして プログラムにて最大のレコードを抽出しなければならないのかと思います。 参考に以下のurlでも同じようなことを実験してます。 http://pentan.info/sql/max_record.html

putiabu
質問者

お礼

質問が足りなかったですね。すみません。 ユーザーごとの直近日を出したいのです。

putiabu
質問者

補足

MAX関数はgroup by 書き損じてますが MAX関数はgroup byを使った上で 複数レコードが出てます。

回答No.4

実際利用しているsqlとその結果、およびその付近のデータ(日付ソートしたもの)を提示してください。質問の内容が曖昧で答えられないと思います。

putiabu
質問者

補足

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)
回答No.3

複数件取得されてしまうのは何か原因があると思うのですが、 もう少し情報が欲しいです。 実際のSQLとか。

noname#263248
noname#263248
回答No.2

さらにorder by 日付項目A limit 1 と付け加えるとどうでしょう?

  • aa5462
  • ベストアンサー率40% (20/49)
回答No.1

一番単純なSQLであれば select max(日付項目A) from テーブルA これでテーブルAの日付項目Aの最大値が取得できます。

putiabu
質問者

補足

それが出来ないから困っていて 原因が分からないんです。 複数レコードが出てくるんです。

関連するQ&A