【问题标题】:How to Obtain First and Last record ? One Step Solution?如何获取第一条和最后一条记录?一步解决方案?
【发布时间】:2015-03-24 14:35:03
【问题描述】:

我有以下数据表。

 Record  Date        Price 
 A       3/1/2015    5 
 A       3/2/2015    6 
 A       3/3/2015    7 
 A       3/4/2015    10 
 B       2/1/2015    4 
 B       2/2/2015    6 
 B       2/3/2015    15 
 B       2/4/2015    2 

如何输出一个表格,只显示表格中第一个日期和表格中最后一个日期的每条记录的第一个价格和最后一个价格。输出列将是记录、第一价格、最后价格。我正在寻找一种易于实施的一步解决方案,以便创建自定义视图。

期望的输出是:

 Record     FirstPrice   LastPrice
 A          5            10 
 B          4            2 

【问题讨论】:

  • 到目前为止你写的代码是什么?
  • 我还没有写任何代码。
  • 发布所需输出的示例以及您的解决方案草稿,以便我们帮助您改进它;)
  • 每条记录都有不同的日期,所以根据您的要求,所有记录都必须在结果中?
  • 解决方案:记录 FirstPrice LastPrice A 5 10 B 4 2

标签: mysql sql where


【解决方案1】:

也许您正在寻找类似的东西?

select R.Record, FD.Price as MinPrice, LD.Price as MaxPrice
from Records R
join (
    select Price, R1.Record
    from Records R1
    where Date = (select MIN(DATE) from Records R2 where R2.Record = R1.Record)
  ) FD on FD.Record = R.Record
join (
   select Price, R1.Record
    from Records R1
    where Date = (select MAX(DATE) from Records R2 where R2.Record =     R1.Record)
  ) LD on LD.Record = R.Record
group by R.Record

http://sqlfiddle.com/#!9/d047b/26

【讨论】:

  • 你的解决方案看起来不错,我只是建议修改这部分:选择R.Record,FD.Price为Min,LD.Price为Max
【解决方案2】:

获取按记录字段分组的最小和最大聚合日期并连接回根数据。如果您可以在同一日期为同一记录字段有多个记录,则必须使用 min、max 或 avg 来获取该日期的一个值。

SQLFiddle:http://sqlfiddle.com/#!9/1158b/3

SELECT anchorData.Record
,      firstRecord.Price
,      lastRecord.Price
FROM (
    SELECT Record
    ,      MIN(Date) AS FirstDate
    ,      MAX(Date) AS LastDate
    FROM   Table1
    GROUP BY Record
    ) AS anchorData
JOIN   Table1 AS firstRecord
ON     firstRecord.Record = anchorData.Record
AND    firstRecord.Date = anchorData.FirstDate
JOIN   Table1 AS lastRecord
ON     lastRecord.Record = anchorData.Record
AND    lastRecord.Date = anchorData.LastDate

【讨论】:

    【解决方案3】:

    “为了创建自定义视图。”...您希望在 Oracle/MySql 中将其作为 CREATE VIEW 或仅作为查询/选择语句执行?

    【讨论】:

    • 创建视图是我要做的。
    • @mituw16 有一个不错的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2019-12-28
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多