我有一个数据库,其中所有内容都使用start_date
和end_date
我想要做的是动态获取一行的版本号。
因此,获取具有由start_date排序的特定item_id的所有行,然后给出start_date
和end_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?
答案 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'