Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql-oracle-为特定组/sku选择第一条和最后一条记录_Sql_Oracle - Fatal编程技术网

sql-oracle-为特定组/sku选择第一条和最后一条记录

sql-oracle-为特定组/sku选择第一条和最后一条记录,sql,oracle,Sql,Oracle,我一直试图找到答案,但没有成功 需要获取:第一次购买的价格和最后一次购买的价格,并按SKU分组 查询结果应如下所示: sku first_purchase_price Last_purchase_price BC123 3.09 6.68 QERT1 9.09 13.23 我的查询 SELECT sku,PRICE,MAX(purchase_DATE),MIN (p

我一直试图找到答案,但没有成功

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

查询结果应如下所示:

sku      first_purchase_price      Last_purchase_price   
BC123    3.09                      6.68    
QERT1    9.09                      13.23
我的查询

SELECT sku,PRICE,MAX(purchase_DATE),MIN (purchase_DATE)
FROM store
ORDER By sku
继续获取:

SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

非常感谢您的帮助

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   

如果您的意图是 获取特定“sku”值的最大和最小“购买日期”值。 您需要对所引用的列进行分组,以获得最大值和最小值。 使用上面的示例数据,您可以尝试以下查询:

SELECT sku, MAX(purchase_DATE), MIN (purchase_DATE)
FROM store
GROUP BY sku
ORDER by sku
这将为您提供每个SKU值的最大和最小购买日期,如:

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”的最低和最高价格,您可以使用一个非常类似的查询。

如果您想查询,您的查询似乎确实缺少一个GROUP BY子句 获取特定“sku”值的最大和最小“购买日期”值。 您需要对所引用的列进行分组,以获得最大值和最小值。 使用上面的示例数据,您可以尝试以下查询:

SELECT sku, MAX(purchase_DATE), MIN (purchase_DATE)
FROM store
GROUP BY sku
ORDER by sku
这将为您提供每个SKU值的最大和最小购买日期,如:

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”的最低和最高价格,可以使用非常类似的查询。

您可以使用聚合函数 简化这类查询

查询

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;
|    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 |

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;
|    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 |
您可以使用聚合函数来 简化这类查询

查询

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;
|    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 |

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;
|    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 |
拨弄

小提琴

试试这个:

with cte as
(select distinct sku,
 min(purchase_date) over (partition by sku order by sku) mindate,
 max(purchase_date) over (partition by sku order by sku) maxdate
 from store)

select distinct c.sku, 
smin.price first_purchase_price, 
smax.price last_purchase_price
from cte c
inner join store smin on c.mindate = smin.purchase_date and c.sku = smin.sku
inner join store smax on c.maxdate = smax.purchase_date and c.sku = smax.sku
order by c.sku
试试这个:

with cte as
(select distinct sku,
 min(purchase_date) over (partition by sku order by sku) mindate,
 max(purchase_date) over (partition by sku order by sku) maxdate
 from store)

select distinct c.sku, 
smin.price first_purchase_price, 
smax.price last_purchase_price
from cte c
inner join store smin on c.mindate = smin.purchase_date and c.sku = smin.sku
inner join store smax on c.maxdate = smax.purchase_date and c.sku = smax.sku
order by c.sku

谢谢你吃了一个桃子!!!!!!!!!!!你以最快的方式解决了它。。。。。。。。。!!!!这对我有好处。谢谢你吃桃子!!!!!!!!!!!你以最快的方式解决了它。。。。。。。。。!!!!是的,我确实想要每个sku的第一个和最后一个价格。谢谢你的意见!!!和propmt回复。是的,我确实想要每个sku的第一个和最后一个价格。谢谢你的意见!!!和propmt响应。