0

とを使用して、すべてが内部でバージョン管理されているデータベースがありstart_dateますend_date

私がやりたいことは、行のバージョン番号を動的に取得することです。

そのため、start_date で並べ替えられた特定の item_id を持つすべての行を取得し、start_dateそれend_dateを 1 つの行に分離します。私が欲しいのは、その行がどこにあるかを見つけることです。

例えばデータ

id | item_id | start_date
1  | 1       | 01-31-2012
2  | 1       | 02-31-2012
3  | 2       | 02-31-2012
4  | 1       | 03-31-2012
5  | 2       | 05-31-2012
6  | 1       | 04-31-2012

使用する場合select id from items where item_id = 2 and start_date = 05-31-2012

返さ5れるので、バージョンに必要なものは2

使用する場合select id from items where item_id = 1 and start_date = 03-31-2012

返さ4れるので、バージョンに必要なものは3

これを行うために考えられる唯一の方法は、item_id が何であれ、すべての行を選択し、start_date をチェックする各項目をループして、version_number を 1 増やしたい場合です。

mysqlだけでそれを行う方法はありますか?

4

2 に答える 2

2
SELECT COUNT(*) version
FROM items
WHERE item_id = 2 AND start_date <= '2012-05-31'

またはid <= 5日付比較の代わりに(idが一意で単調に増加すると仮定)

于 2012-11-20T23:54:03.533 に答える
0

これはOracleで機能します。以下のように内部選択クエリで分析関数row_number()を使用します

select version from (select row_number() over ( partition by item_id  order by start_date ) version,item.* from item) where start_date ='05-31-2012'
于 2012-11-21T01:10:03.973 に答える