首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择特定组/sku的第一条也是最后一条记录

选择特定组/sku的第一条也是最后一条记录
EN

Stack Overflow用户
提问于 2014-08-01 03:03:00
回答 4查看 5.3K关注 0票数 1

我一直在寻求答案,但没有成功。

需要获得:第一次采购的价格和最后一次购买的价格,并按SKU分组。

查询结果应如下所示:

代码语言:javascript
复制
sku      first_purchase_price      Last_purchase_price   
BC123    3.09                      6.68    
QERT1    9.09                      13.23

我的查询

代码语言:javascript
复制
SELECT sku,PRICE,MAX(purchase_DATE),MIN (purchase_DATE)
FROM store
ORDER By sku

不断获得:

代码语言:javascript
复制
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

代码语言:javascript
复制
SQL Error: ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"

任何帮助都是非常感谢的。

代码语言:javascript
复制
SKU     TRANSAC_ID  purchase_DATE      PRICE
----------------------------------------------
BC123   CHI0018089  21-OCT-09          6.98
BC123   CHI0031199  11-MAR-13          6.68 
BC123   NAP1000890  22-JAN-08          3.09 
BC123   NAP1011123  21-DEC-11          89.9 
QQQ789  NAP1000891  22-JAN-08          4.01 
QERT1   JOL0400090  8-MAR-12           13.23 
QERT1   NAP1000990  22-FEB-08          9.09 
QERT1   NAP1001890  28-FEB-09          2.09 
WW000   CHI0031208  11-MAR-13          200.01 
WW000   CHI0031298  11-MAR-13          200.01 
YZV11   JOL0200080  10-OCT-06          230.23 
YZV11   AUR0700979  14-APR-13          6.68 
YZV11   CHI0018189  03-OCT-09          556.98 
YZV11   JOL0300080  10-MAR-11          300   
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-01 03:59:14

您可以使用第一/最后聚合函数来简化这类查询。

SQL Fiddle

查询

代码语言:javascript
复制
select
        sku,
        max(price) keep (dense_rank first order by purchase_date) first_purchase_price,
        max(price) keep (dense_rank last order by purchase_date) last_purchase_price
from
        store
group by
        sku;

结果

代码语言:javascript
复制
|    SKU | FIRST_PURCHASE_PRICE | LAST_PURCHASE_PRICE |
|--------|----------------------|---------------------|
|  BC123 |                 3.09 |                6.68 |
|  QERT1 |                 9.09 |               13.23 |
| QQQ789 |                 4.01 |                4.01 |
|  WW000 |               200.01 |              200.01 |
|  YZV11 |               230.23 |                6.68 |
票数 7
EN

Stack Overflow用户

发布于 2014-08-01 03:58:45

如果您的目的是为"sku“的某个值获得最大和最小的"purchase_DATE”值,那么似乎您的查询实际上缺少了一个GROUP子句。您需要对所引用的列进行分组,以获得最大值和最小值。使用上面的示例数据,您可以尝试以下查询:

代码语言:javascript
复制
SELECT sku, MAX(purchase_DATE), MIN (purchase_DATE)
FROM store
GROUP BY sku
ORDER by sku

这将给出每个SKU值的最大和最小购买日期,例如:

代码语言:javascript
复制
BC123   2013-03-11  2000-01-22   -- max and min "purchase dates" for "BC123" sku
QERT1   2012-03-08  2008-02-22   -- ...                              "QERT1" sku
QQQ789  2008-01-22  2008-01-22   -- ...                             "QQQ789" sku
...                                 ...                                ...

如果您想要一个"sku“的最低和最高价格,您可以使用一个非常类似的查询。

票数 0
EN

Stack Overflow用户

发布于 2014-08-01 04:02:21

代码语言:javascript
复制
WITH CTE AS
(
SELECT SKU, MAX(PURCHASE_DATE) MAXDATE, MIN(PURCHASE_DATE) MINDATE
FROM STORE
GROUP BY SKU
)
SELECT DISTINCT CTE.SKU, MINVAL.PRICE MINPRICE, MAXVAL.PRICE MAXPRICE
FROM STORE MINVAL, STORE MAXVAL, CTE
WHERE
CTE.SKU = MINVAL.SKU
AND CTE.MINDATE = MINVAL.PURCHASE_DATE
AND CTE.SKU = MAXVAL.SKU
AND CTE.MAXDATE = MAXVAL.PURCHASE_DATE
ORDER BY SKU

小提琴这里

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

https://stackoverflow.com/questions/25072244

复制
相关文章

相似问题

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