【问题标题】:Filtering SQL table by a changing argument通过更改参数过滤 SQL 表
【发布时间】:2020-07-17 12:34:52
【问题描述】:

我一直在尝试过滤这个数据库以获得一个只有黄色数据的表格(请参阅附表):

为了获得这六行,我要添加的规则是:每次代码栏发生变化时,我都想获得该日期的最大成熟度。

我试过这段代码,但它不起作用...:

SELECT
    DATE,
    Ticker,
    Maturity,
    Value
FROM
    Tables
WHERE
    MAX(Maturity)
GROUP BY
    Ticker

我不确定附加的图像是否可见,因为当我打开我的问题时它没有出现。如果没有出现请告诉我。

【问题讨论】:

  • 记录是如何排序的? SQL 表表示 无序 集。
  • 哪种口味? MS SQL、MySQL、MariaDB、甲骨文?

标签: sql filter


【解决方案1】:

SQL 表代表无序 集合。您的问题预先假设了对数据的排序。假设您有另一列包含此信息。

那么你就可以使用lead():

select t.*
from (select t.*,
             lead(ticker) over (order by <ordering column>) as next_ticker
      from t
     ) t
where next_ticker is null or next_ticker <> ticker;

【讨论】:

  • 您能否简单解释一下lead() 和lag() 的用法,它实际上是如何在内部工作的。而且这些滞后函数确实在实际操作中增加了不一致,我想我们可以将其用于推荐数据目的,就像上面使用的 uve 一样
  • 关于lead()的信息,您可以参考您正在使用的数据库的文档。我不知道您所说的“滞后函数确实会在实际输出中增加不一致”。
  • 我的意思是滞后函数显然有 n-1 和 1 个空值迭代,所以我认为这些列和滞后列会滞后 1,因此如果直接使用会不一致
  • 感谢您的回答,我一直在尝试使用您的代码,但是,对于我的系统,'LEAD' 不是公认的内置函数名称。我也尝试了 LAG,得到了相同的结果。有没有其他方法可以做到这一点?
  • @Alvaro 。 . .这使用了几乎所有数据库中可用的标准 SQL 函数。您的问题没有数据库标签。
猜你喜欢
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多