- ベストアンサー
SQL文の書き方
次のような列の2つテーブルがあります ID,メッセージ,書いた日 ID,名前 一つ目のテーブルに メッセージを追加していき IDの違う最新のメッセージだけ取り出したいのですが 考えても分からなくて… SELECT ID,MAX(書いた日) FROM 一つ目のテーブル GROUP BY ID の時のIDそれぞれのメッセージが取り出せればいいのですが 最終的には IDの部分は別テーブルにある IDと一致する名前に置き換えて取り出したいと思っています よろしくお願いします データベースはPostgreSQLを使っています
- longhorn
- お礼率68% (13/19)
- その他(データベース)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
PostgreSQLは使用したことがないのですが、PostgreSQL も副問い合わせは使用できますよね? T1 : ID,メッセージ,書いた日 T2 : ID,名前 とすると SELECT T1.ID, T1.書いた日, T1.メッセージ, T2.名前 FROM (SELECT ID, MAX(書いた日) AS 書いた日 FROM T1 GROUP BY ID ) S, T1, T2 WHERE T1.ID = S.ID AND T1.書いた日 = S.書いた日 AND S.ID = T2.ID; のような感じでできるんじゃないかと思います。
関連するQ&A
- SQL文作成のお願い
前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?
- ベストアンサー
- PostgreSQL
- SQL文で教えてください
初めてです。お願いします。 次のようなテーブルがあります。 ID kosuu ------------ 1 3 2 5 3 1 kosuuの一番大きい値とそれに紐づくIDを取得したいのですが SELECT ID, Max(kosuu) FROM tblX と書くと、IDが不正だとおこられてしまいます。 ID kosuu ------------ 2 5 を抽出するにはどうしたらよいでしょうか? Access2000です。宜しくお願いします。
- ベストアンサー
- その他(データベース)
- SQLのこと:distinctして並び替えたい
select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。
- ベストアンサー
- PostgreSQL
- ACCESSでSQL文
宜しくお願いします。 ACCESS2000で 仕訳帳テーブルの特定期間の科目ID別集計を中間テーブルに生成する処理の以下の文でエラーメッセージが出ます。 DoCmd.RunSQL ("Insert Into 中間(月度,科目ID,借方計,貸方計) " _ & "Select 開始日,科目ID,sum(借方),Sum(貸方) From 仕訳帳" _ & "Group By 科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)") エラーメッセージの内容は 「クエリー式’科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)'の構文エラー:演算子がありません」
- ベストアンサー
- オフィス系ソフト
- (初心者です)パフォーマンスの良いSQLの書き方
SQL初心者です。初歩的かもしれませんが 教えていただけると助かります。 社員情報を管理するマスタテーブル『MST』(PKはSHAIN_ID)、 社員のシステムログイン履歴をログとして残すテーブル『LOG』 (PKはSEQのみ、SHAIN_IDとLOGIN_DATEを持つ) があります。 社員ごとに最新のログイン日付を表示するとき、 以下のようなSQLを書いたところ「パフォーマンス上あまりよくないSQL」 と言われてしまったのですが、どのように改善すればよいでしょうか? ------------------------------------------ SELECT MST.SHAIN_ID, MST.SHAIN_NAME, LOG.LOGINTIME FROM MST, (SELECT LOGINUSERID, MAX(LOGINDATE) LOGINDATE FROM LOG GROUP BY SHIAN_ID ) LOG WHERE MST.SHAIN_ID = LOG.SHAIN_ID ORDER BY MST.SHAIN_ID ------------------------------------------
- ベストアンサー
- SQL Server
- SQL文でのデータの取得が上手くいきません
初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)
- 締切済み
- その他(データベース)
- 条件付GROUP BY句の記述方法
テーブルAには 列A 数値列 ID列(主キー) の 3つの列があるのですが このテーブルのデータを列AでGROUP BYする際 ID列のデータが5と10の物だけGROUP BYの 対象にしたいのですが そのまま流すとGROUP BYでIDが指定されてません、 HAVING句では無効です。 とメッセージが出ます、 かと言ってID列をGROUP BYすると 主キーなのでSUMが5と10の物に分かれてしまいます。 これはどのようにして回避すればいいのでしょうか? SELECT 列A,SUM(数値列) FROM テーブルA GROUP BY 列A HAVING ID列 IN (5,10) 環境 Win2000 SQLServer2000
- ベストアンサー
- SQL Server
- SQLのcount()とgroup by
以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQL文 2つのテーブルから、グループごとの合計を求める
テーブル名:グループ表 ID グループ名 ------------------------- 100 Aグループ 101 Bグループ 102 Cグループ 103 Dグループ 104 Eグループ テーブル名:売上表 ID 売上年月日 売上額 ------------------------------ 101 20090401 1000 101 20090501 2000 102 20090401 2500 102 20090503 1500 103 20090404 3000 103 20090506 4000 上記の2つのテーブルがあります。 グループごとの売上合計一覧を出します。 ■求めたいSELECT文結果 グループ名 合計(売上額) ---------------------- Aグループ 0 Bグループ 3000 Cグループ 4000 Dグループ 7000 Eグループ 0 select グループ名,sum(売上額) from (select グループ名,売上額 from グループ表,売上表 where グループ表.ID = 売上表.ID) group by グループ名 では、 グループ名 合計(売上額) ---------------------- Bグループ 3000 Cグループ 4000 Dグループ 7000 となってしまい、うまくいきません・・・ どうように書いたらよろしいでしょうか?
- ベストアンサー
- Oracle
- SQL文について
次のSQL文のうちで、適切なものはどれか。 学生表(学生番号,学生氏名,所属学科,取得単位数) 答えはこれ↓なんですが、なぜなのかがわかりません。 SELECT 所属学科,MAX(取得単位数) FROM 学生表 GROUP BY 所属学科
- ベストアンサー
- SQL Server
お礼
回答ありがとうございます 返事がおくれてすみません なるほど これならうまくいきそうです 勉強になります ありがとうございました