我不是SQL专家,我过去使用过它,很少遇到Google无法解决的问题…但是这次我需要询问社区。
我有一个名为“ Transactions”的表的数据库,其数据如下:
ProdNo | Price | TransactionDate | PurchasedBy | etc.....
----------------------------------------------------------
3STRFLEX | 13.02 | 20162911 | AWC | .....
3STRFLEX | 15.02 | 20162011 | DWC | .....
3STRFLEX | 15.02 | 20160101 | AWC | .....
AFTV2 | 35.49 | 20162708 | AWC | .....
AFTV2 | 29.99 | 20160106 | DWC | .....
AFTV2 | 29.99 | 20160205 | AWC | .....
所需的输出是:
ProdNo | Price | TransactionDate
-----------------------------------
3STRFLEX | 13.02 | 20162911
AFTV2 | 35.49 | 20162708
我尝试自己编写一个,最终得到如下SQL:
select t.ProdNo, t.TransactionDate as 'LastPurchaseDate', t.Price
from Transactions t
inner join (
select ProdNo, max(TransactionDate) as 'LastPurchaseDate'
from Transactions
WHERE Price > 0
group by ProdNo
) tm on t.ProdNo = tm.ProdNo and LastPurchaseDate = tm.LastPurchaseDate
但是,在我的数据集中,此返回(减少)显示每个产品有多行
ProdNo | LastPurchaseDate | Price
3STRFLX | 20120924 | 0.000000
3STRFLX | 20120924 | 22.000000
3STRFLX | 20150623 | 0.000000
3STRFLX | 20150623 | 1.220000
3STRFLX | 20150623 | 1.222197
因此,请确认:无论价格如何,我希望每种产品的最新购买日期为1行,但是我需要在返回的数据中提供价格。
谢谢
您可以使用CTE和排名功能PARTITION BY
:
WITH CTE AS
(
select t.ProdNo, t.TransactionDate as 'LastPurchaseDate', t.Price,
rn = row_number() over (partition by ProdNo order by TransactionDate desc)
from Transactions t
)
SELECT ProdNo, LastPurchaseDate, Price FROM CTE WHERE RN = 1
问题内容: 目标 在数据库中选择每种产品的最低/最高价格。 问题 我只能获得具有指定标识符的产品。 我有的 我正在使用 MySQL, 并且有以下查询: 我的回报是,和。 解决方案 谢谢您的帮助。上面的两个答案都是正确的-但我选择@GordonLinoff答案被接受,因为我认为这将对初学者更加有用和享受-‘’但真的要感谢你们两个人。 最终查询: 干杯! 问题答案: 首先,使用时,即使MySQL不需要
我正在使用Adaptive Server Enterprise/15.7/EBF 25127 SMP sp 136/P/x86 _ 64/Enterprise Linux/ase 157 sp 136 x/3955/64位/FBO/周一2015年10月19日19:12:00 我有一个表,包括多个日期和价格的记录,我希望选择最近的日期和价格是最高的或最大的。 对于错误消息,max()函数似乎不起作用
问题内容: 我想选择每种产品中最便宜的(包括运输成本,价格转换为当地货币)。最便宜=(product.price + product.shipping)*Seller.to_aud 我的数据库具有如下表: 如果所有卖家都使用一种货币,而我没有增加运输成本,则可以得到我想要的结果: 但是我不知道从这里去哪里。任何帮助将不胜感激。 问题答案: SELECT a.id, a.price*ISNULL(s
我需要找到产品的最低和最大价格,这样我就可以用它来设置我的价格过滤器的范围。我在catalog/model/layer/filter/price.php中使用了getMaxPriceInt()和getMinPriceInt()方法。但是返回的值基于'min_price'字段。 如何根据final_price找出集合中产品的最低和最高价格?也就是说,如果集合中有4个产品(我只登记需要的字段) get
我在桌子设计方面没有太多的经验。我的目标是创建一个或多个满足以下要求的产品表: > 支持多种产品(电视、电话、PC、...)。每种产品都有一组不同的参数,例如: > 手机将有颜色、大小、重量、操作系统... PC将有CPU、HDD、RAM... 参数集必须是动态的。您可以添加或编辑任何您喜欢的参数。 如果每种产品没有单独的表,我怎么能满足这些要求呢?
问题内容: 我有两个表,一个称为“事件”,一个称为“文档”。每个表都有两个日期列,开始和结束(因此,事件开始,事件结束,文档开始,文档结束)。这两个表通过名为Customer_ID的字段链接。我有兴趣根据客户ID将最接近的相关事件开始(及其ID)日期返回到Doc开始日期,因此表中的数据如下所示: 我希望最终结果显示如下: 我尝试使用谷歌搜索解决方案,并尝试了一个或两个建议,但我找不到的示例似乎都不