选择值发生变化的行
Posted
技术标签:
【中文标题】选择值发生变化的行【英文标题】:Select rows where value changes 【发布时间】:2010-12-20 07:00:12 【问题描述】:我在访问数据库中有一个表格,其中包含职位描述、项目、日期和所需数量的列。对于每个描述,我想为每个工作/项目组合选择第一个日期条目,以及金额变化的行。
所以,如果我有
Job proj date amt
Programmer 105 01-01-11 3
Programmer 105 01-02-11 3
Programmer 105 01-03-11 2
Programmer 105 01-04-11 2
Programmer 105 01-05-11 3
Programmer 110 01-03-11 1
Programmer 110 01-04-11 2
Programmer 110 01-05-11 3
Manager 105 01-01-11 1
Manager 105 01-02-11 2
Manager 105 01-03-11 2
Manager 105 01-04-11 2
Manager 105 01-05-11 2
我要选择
Programmer 105 01-01-11 3
Programmer 105 01-03-11 2
Programmer 105 01-05-11 3
Programmer 110 01-03-11 1
Programmer 110 01-04-11 2
Programmer 110 01-05-11 3
Manager 105 01-01-11 1
Manager 105 01-02-11 2
我有一张可以使用的不同职位描述的表格。
【问题讨论】:
【参考方案1】:nextamt 的第一个条目将始终为 Null:
SELECT j.Job,
j.proj,
j.Date,
j.amt,
(SELECT TOP 1 amt
FROM jobs q
WHERE q.job=j.job AND q.proj=j.proj AND q.date<j.date
ORDER BY [date] DESC) AS nextamt
FROM jobs AS j
WHERE ((SELECT TOP 1 amt
FROM jobs q
WHERE q.job=j.job AND q.proj=j.proj AND q.date<j.date
ORDER BY [date] DESC)) <>[amt]
Or ((SELECT TOP 1 amt
FROM jobs q
WHERE q.job=j.job AND q.proj=j.proj AND q.date<j.date
ORDER BY [date] DESC)) Is Null
【讨论】:
【参考方案2】:这可以通过 Oracle/SQL-Server/etc 中提供的分析(窗口)函数轻松完成(谷歌表示滞后、领先、first_value、last_value 等),但 Access 不支持它们,因此您必须做这样的自我加入:
SELECT
rows.Job, rows.proj, rows.dte, curr.amt
FROM
((SELECT Data.Job, Data.proj, Data.dte,
(SELECT max(dte)
FROM data as prev
WHERE prev.job = data.job and
prev.proj = data.proj and
prev.dte < data.dte) AS prev_dte
FROM Data) as [rows]
INNER JOIN Data AS curr
ON (rows.dte = curr.dte) AND
(rows.proj = curr.proj) AND
(rows.Job = curr.Job)
)
LEFT JOIN Data AS prev
ON (rows.prev_dte = prev.dte) AND
(rows.proj = prev.proj) AND
(rows.Job = prev.Job)
WHERE
prev.amt<>[curr].[amt] OR
prev.Job Is Null;
因此,称为 [rows] 的内联视图会找到小于表中每个日期的最大日期,然后返回内部联接以获取当前行和上一行的外部联接,以便您选择第一行。
(代码格式有问题 - 抱歉。)
编辑:这是输出,我认为这是您需要的。
Job proj dte amt
Programmer 105 01/01/2011 3
Programmer 105 03/01/2011 2
Programmer 105 05/01/2011 3
Programmer 110 03/01/2011 1
Programmer 110 04/01/2011 2
Programmer 110 05/01/2011 3
Manager 105 01/01/2011 1
Manager 105 02/01/2011 2
【讨论】:
以上是关于选择值发生变化的行的主要内容,如果未能解决你的问题,请参考以下文章
Jquery 结合 easyUI 实现 当选择框中的值等于某一个值的时候,另一个combobox中的值发生变化。
为啥调用 location.reload(); 后我的表中的行顺序会发生变化?关闭模态框时