0

列 ID、時間、およびテキストを含む DB テーブルがあります。ID は一意ではありません。「個別のIDごとに、Tより前の最大値の行を教えてください」というクエリを作成しようとしています。2 番目の部分は ORDER BY DESC LIMIT 1 WHERE time < T で十分簡単ですが、すべての ID を確実にカバーする方法がわかりません。

例として:

ID,time,text
1,10,"hello"
1,20,"world"
2,10,"foo"
3,10,"bar"
4,50,"blah"

時間 25 で検索した場合、次のようになります。

1,20,"world"
2,10,"foo"
3,10,"bar"

DISTINCT ID を検索してからそれぞれを検索することで、複数のクエリを実行できますが、より効率的な複合クエリ フォームがあることを期待していました。

4

2 に答える 2

0
SELECT t.ID, t.time, t.text
    FROM YourTable t
        INNER JOIN (SELECT ID, MAX(time) AS MaxTime
                        FROM YourTable
                        WHERE time < T
                        GROUP BY ID) q
            ON t.ID = q.ID
                AND t.time = q.MaxTime
于 2012-09-27T18:57:44.097 に答える
0

サブクエリを使用できます。

select t1.id, t1.time, t1.test
from yourtable t1
inner join 
(
    select id, max(time) MaxTime
    from yourtable
    where time < T
    group by id
) t2
   on t1.id = t2.id
   and t1.time = t2.time
于 2012-09-27T18:58:31.723 に答える