首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lag ()执行计算

使用lag ()执行计算
EN

Stack Overflow用户
提问于 2012-11-12 01:11:02
回答 2查看 84关注 0票数 0

我需要帮助来计算一个仪表消耗的基础上采取的当前价值每月

我有以下表格:

地址(PostCode整型,街道可变字符)

仪表(MeterID int,InstallationDate date,PostCode int)

正在读取(ReadNo int,ReadDate date,ReadValue int,MeterID int,ReaderID int)

我尝试了以下几种方法:

代码语言:javascript
复制
Select ReadDate, 
       ReadValue AS CurrentValue, 
       lag(readvalue, 1, 0) OVER (ORDER BY READVALUE) AS PreviousValue, 
       readvalue - lag(readvalue, 1, 0) OVER (ORDER BY READVALUE) AS Consumption
 From Reading R, 
      Meter M, 
      Address A 
Where R.MeterID = M.MeterID
  AND A.PostCode = M.PostCode AND A.PostCode = '1005'
Order By ReadDate;

地址的仪表更换为新仪表时出现问题,有谁能帮我解决吗?

EN

回答 2

Stack Overflow用户

发布于 2012-11-12 01:37:14

我相信很多人都会感谢你的!

通过在LAG中使用ORDER BY READVALUE,您将计算下一个最高的值(默认的排序顺序是升序),而不是最后取的值。这应该是

代码语言:javascript
复制
lag(readvalue, 1, 0) over (order by readdate desc)

以获取先前读取的值。

您的地址表中没有足够的信息来确定仪表是否位于同一地址。没有楼号等。所以,你的问题的正确答案是社交的,与数据库无关。如果有人有两个计价器,就送出两张账单。

然而,假设地址表确实有足够的信息来唯一地标识一个地址,即每个邮政编码都是一个单独的建筑物,那么您已经在做正确的事情,尽管我会按照以下方式重新组织您的查询(停止引用整数)。

代码语言:javascript
复制
select r.readdate
     , r.readvalue - lag(r.readvalue, 1, 0) over ( order by readdate desc )
  from address a
  join meter m 
    on a.postcode = m.postcode
  join reading r
    on m.meterid = r.meterid
 where a.postcode = 1005
 order by readdate desc

您选择邮政编码的每个仪表,然后选择所有这些仪表的每个读数。如果在读数之间安装了新的仪表,那就没问题了。

这似乎不太可能奏效;前一个仪表应该有一个最终读数,否则readvalue将高于该值的滞后,这会将您带回两个账单的场景。或者,您需要一种方法来显示账单在数据库中何时是“最终”的。

要获得最新的值,只需将所有内容包装在子选择中,然后选择顶行:

代码语言:javascript
复制
select * from ( <above query> ) where rownum < 2
票数 1
EN

Stack Overflow用户

发布于 2012-11-12 02:24:12

您的模式是否将仪表(服务)与场所相关联?如果您使用的是商业客户信息系统,所有这些系统都会这样做,并要求使用它来生成账单。有一个服务表,每个服务都住在一个场所。邮寄地址可能与办公地点相同,也可能不同。邮寄地址与客户相关联,例如:一家连锁餐厅有一个总部和20家餐厅。他们在总部收到账单,所以所有的邮寄地址都是相同的,服务的20个物理地址可能非常不同。

如果您为此推出了自己的模式,则需要考虑实用程序计费的实际工作原理。即使这只是一个玩具模型。

在过去的30年里,我在很多系统上都这样做过。它们的工作原理都与上面的类似。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13333424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档