当前位置: 首页 > 面试题库 >

一行中的最小和最大行的SQL值

太叔逸春
2023-03-14
问题内容

我有一张价格变动表,我需要获取初始价格和最新价格。换句话说,我想在每种产品的一行中显示min(StartDate)和max(StartDate)的价格值。

表的结构很简单:

ProductID, StartDate, Price

所需的结果是

ProductId, StartDate, InitialPrice, LatestDate, LatestPrice

问题答案:
WITH latestPrice AS
(
   SELECT ProductID, StartDate, Price,
          ROW_NUMBER() OVER (PArtition BY ProductID ORDER BY StartDate DESC) rn
   FROM TableName
)
, initalPrice AS
(
  SELECT ProductID, StartDate, Price,
         ROW_NUMBER() OVER (PArtition BY ProductID ORDER BY StartDate ASC) rn
  FROM TableName  
)
SELECT  a.ProductID,
        b.StartDate, 
        b.Price InitalPrice, 
        c.StartDate LatestDate, 
        c.Price LatestPrice
FROM    (SELECT DISTINCT ProductID FROM tableName) a
        INNER JOIN initalPrice b
          ON a.ProductID = b.ProductID AND b.rn = 1
        INNER JOIN latestprice c
          ON a.ProductID = c.ProductID AND c.rn = 1
  • SQLFiddle演示


 类似资料:
  • 问题内容: 我试图一次从一张桌子上得到2行。上周的最小日期时间(今天-7)和最晚的日期(今天)的一个。 我的桌子: 我可以通过以下方式选择上周的数据: 但我只想要第1行和第125行,因为这些是用于计算的行。所以我的问题是: 如何从上一个查询的结果中选择2行(带有MIN和MAX日期)? 问题答案: 您可以使用此: 编辑: 由于两台计算机完全有可能具有相同的值,因此应更新查询以在子句中也包含过滤器。我

  • 我有两个矩阵,如下所示: 我想找到一个向量,它是一个矩阵1*3,它的每一个元素都是M的每一行的最小元素乘以N的对应行的最大元素(例如,向量的第一个元素是矩阵M的第一行的最小元素,即1,乘以矩阵N的第一行的最大元素,即4,因此向量的第一个元素是1*4,即4)。最后的答案是:(1*4,1*3,1*4)=(4,3,4) 为了找到这个向量(或矩阵),我写了下面的代码: 但它太长了。有人能写一个更短(或更简

  • 问题内容: 我有一个像这样的猫鼬计划… 我有2个问题… 当我尝试插入字符串“ abc”时,它会静默忽略此字段的插入。模式中的其余字段将成功插入。我的印象是它将抛出异常。有可能这样做吗? 如果我尝试插入5,它只是允许它,看来min和max根本没有起作用。 我想念什么? 问题答案: 该验证可以帮助你。下面是一个示例。 尝试插入时,出现以下错误 尝试插入时,出现以下错误

  • 问题内容: 对SQL语句中要删除的行数应设置什么限制? 我们需要从1删除到几十万行,并且需要应用某种最佳实践限制,以便在每次清空废纸bas时不会绝对终止SQL Server或填充日志。 此问题并非特定于任何类型的数据库。 问题答案: 这是一个非常广泛的问题,基本上可以归结为“取决于”。影响它的因素包括: 您的并发级别是多少?delete语句在受影响的行上设置排他锁。根据数据库引擎,删除的数据分布等

  • 问题内容: 可以说我有一个包含许多这样的行的表: 我正在做一个简单的查询,像这样: 运行此查询后,我得到如下结果: 非常简单 :) 我现在需要做的是选择计数大于10的具有最小和最大利润的行(这是一个参数) 我能够通过此获得最小值: 我正在考虑使用ORDER BY DESC进行上述查询,但这不是最佳解决方案。 我需要做的是: 选择2行:按范围分组时,第一行最少,第二行最大AVG利润。 编辑: 如果我

  • 初始数据: 使用此查询: 我得到: 但我需要分组“quotite”时,下一行是相同的,并显示第一行的开始日期和最后一行的日期。 预期结果: gordon提供的解决方案: 选择agenhi,tacthi,min(dtfihi)作为start_date,lead(max(dtfihi))over(按agenhi分区,seqnum-seqnum_2按max(dtfihi)排序)作为end_date,fr