获取mysql行版本号?

时间:2012-11-20 23:51:49

标签: mysql sql versioning database-versioning

我有一个数据库,其中所有内容都使用start_dateend_date

进行版本化

我想要做的是动态获取一行的版本号。

因此,获取具有由start_date排序的特定item_id的所有行,然后给出start_dateend_date,将其隔离为一行。我想要的是找出那一排的位置。

e.g。数据

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?

2 个答案:

答案 0 :(得分:2)

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

id <= 5代替日期比较(假设id是唯一且单调增长)

答案 1 :(得分: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'