人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQLについての質問です。以下のようなテーブルを考えます。
id | user_id | date
---|---------|---------
1| 1| 2007/3/4
2| 2| 2007/5/4
3| 1| 2007/3/6
4| 3| 2007/7/4
5| 2| 2007/4/4
6| 3| 2007/3/4
ORDERとLIMITを使わずに「各user_id」の「今日の日付より過去」かつ「今日に近いもの」の「id」を取得するSQLを教えてください。もしくは「できない」ということを納得できる形で説明してください。
以上、よろしくお願いします。

●質問者: k1LoW
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:postgreSQL SQL いもの 過去
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●100ポイント ベストアンサー

未確認ですが こんな感じでできると思います。

select ta.id from テーブル ta,(SELECT テーブル.user_id u, Max(テー

ブル.date) d

FROM テーブル2

WHERE (((テーブル.date)<now))</p>

GROUP BY テーブル.user_id ) tb where ta.user_id = tb.u and ta.date = tb.d

◎質問者からの返答

今確かめたところ無事目的の結果を得ることができました!

ありがとうございます!

一部修正した部分は、now()の部分をdate_truncをかませて時刻でなく日付で判断する形にしただけです。


2 ● kn1967
●35ポイント

SELECT id,usrt_id,date,(SELECT MAX(date) FROM t WHERE usrt_id = a.usrt_id AND date < a.date GROUP BY usrt_id)

FROM t a;

◎質問者からの返答

詳しい検証はまだですが、一部修正した形で(usert_id→user_id)ためしたところ、出力結果が6レコードでてきてしまいます。

上記の点は解消できるとして、サブクエリの部分には目的の結果の逆の値が出力されていました。

実際に使ったSQL文を付記します。

SELECT id,user_id,date,(SELECT MAX(date) FROM test_table WHERE user_id = a.user_id AND date < a.date GROUP BY user_id)

FROM test_table a;

-------

追記です。正しくは「逆の値」ではなく「ほぼ逆の値」でした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ