我在数据库上遇到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
答案 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