【问题标题】:How do I get earliest records using Min() and Where() SQL functions?如何使用 Min() 和 Where() SQL 函数获取最早的记录?
【发布时间】:2019-11-27 11:58:00
【问题描述】:

我正在尝试提取最早日期的记录,但一直遇到错误。我以为我可以将其作为 WHERE 子句的一部分,但我错了。如何提取符合我当前代码中的两个条件的数据?

left outer join 
(SELECT
[RID]
,[p_rid]
,[Budget Records.Budget ID]
,[Budget Records.Budget approval process]
,[Budget Records.Inflation base date]
,[Budget Records.Budget Stage]

,CAST(ISNULL([Budget Records.Total capital budget],0) as float) as [CAR Total capital budget]

FROM [FSG_DATA_TEAM].[dbo].[BR]
WHERE [Budget Records.Budget Stage] in ('Cost Plan 1') and min([Budget Records.Inflation base date])) as y

我得到输出“在预期条件的上下文中指定的非布尔类型的表达式,靠近')'”但我希望返回的值取决于最早的通货膨胀基准日期.

【问题讨论】:

  • min([Budget Records.Inflation base date] 不是有效条件。
  • 用您正在使用的数据库标记您的问题。您的列引用看起来不正确。

标签: sql group-by where-clause min multiple-records


【解决方案1】:

如果您的数据库支持使用窗口分析功能(似乎SQL-Server),您可以将上述部分查询转换为:

left outer join 
(
    SELECT *
    (
     SELECT
          [RID]
          ,[p_rid]
          ,[Budget Records.Budget ID]
          ,[Budget Records.Budget approval process]
          ,[Budget Records.Inflation base date]
          ,row_number() over (order by [Budget Records.Inflation base date]) as rn
          ,[Budget Records.Budget Stage]
          ,CAST(ISNULL([Budget Records.Total capital budget],0) as float) as [CAR Total capital budget]
      FROM [FSG_DATA_TEAM].[dbo].[BR]
     WHERE [Budget Records.Budget Stage] in ('Cost Plan 1') 
    ) 
    WHERE rn = 1
) as y   

由于[Budget Records.Inflation base date] 列的最小值而限制结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2016-05-29
    • 2015-12-10
    • 2020-09-29
    • 2020-09-12
    • 2018-04-26
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多