2012-11-20 111 views
0

我的一切是其自身内部使用start_dateend_date获取mysql行版本号?

版本数据库我想要做的是动态获取的行版本号。

因此,获取与特定的所有行ITEM_ID由起始日期排序,然后给出一个start_dateend_date,将其隔离到一排。我想要的是找出那排的位置。

例如数据

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,如果它不是我想要的版本号增加1。

是有一种方法只用mysql来完成它?

+0

如何在上例中将版本定义为2和3。请详细解释。 –

+0

@NilamDoctor,因为具有选定日期的匹配行是具有该item_id的第2和第3行。 – Hailwood

回答

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

id <= 5代替日期比较(假设id是唯一的,单调增长)的内选择查询如下面oracle..use解析函数ROW_NUMBER

+0

这不适用于添加新版本,如SELECT COUNT(*)版本FROM test7 WHERE item_id = 1 AND start_date <='2012-05-30'; – Drew

+0

@德鲁·皮尔斯:? – zerkms

+0

,因为他想让它变成5 – Drew

0

这一个工程()

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'