版本化特定记录

时间:2014-04-22 17:45:09

标签: sql firebird2.5

我在数据库上遇到SQL查询问题,并且非常依赖您的帮助。关键是我在任何表中都有2列。其中一列包含日期和其他数值。我的任务是添加第三列,数值定义原始时间特定数值 - 一种优先级。如果该值仅以一个记录的形式存在,则匹配只有一个日期在第三列中应该接收值1。如果特定值出现在具有相同日期的两个记录中,则3列中的这些记录中的一个应该具有值1,而第二个中的记录应该具有后者 - 值2如何进行该操作?

它有什么问题?这是我的代码:

SELECT s.id, s.value, (
  SELECT s2.value, COUNT(s2.id) FROM table s2 GROUP BY s2.value ORDER BY s2.value
 ), s.date 
 FROM table s
 GROUP BY s.value

实施例: 我有两列 - 一列有日期,另一列有值。值是唯一的,但两个或三个不同的值可能具有相同的日期:

Values      Dates
0.1         2005.01.01
0.1         2006.02.01
0.3         2006.12.01
0.5         2007.06.05
0.3         2007.03.01
0.3         2007.05.20

我想添加具有该值的版本的列,如下所示:

Values      Dates          Version
0.1         2005.01.01     1
0.1         2006.02.01     2
0.3         2006.12.01     1
0.5         2007.06.05     1
0.3         2007.03.01     2
0.3         2007.05.20     3

1 个答案:

答案 0 :(得分:0)

FirebirdFAQ为例,您可以执行以下操作:

SELECT a.column1, a.column2, COUNT(b.column1) + 1 AS "rank"
FROM theTable a
LEFT JOIN theTable b ON a.column1 = b.column1 AND b.column2 < a.column2
GROUP BY 1, 2

在即将推出的Firebird 3中,您可以使用RANK()ROW_NUMBER()等Windows功能:

SELECT column1, column2,
   RANK() OVER (PARTITION BY column1 ORDER BY column2) AS "rank"
FROM theTable a