gpt4 book ai didi

sql - MySQL查询以获取每个分类的最新和最便宜的项目

转载 作者:行者123 更新时间:2023-11-29 01:46:56 25 4
gpt4 key购买 nike

我有一个数据集,其中包含各种租车的价格。数据包括:

  • 汽车类别(紧凑型、小型货车、SUV 等),
  • 租金价格,以及
  • 收集数据的日期。

我需要查询这些数据以获得每个类(class)最便宜的价格,但我还需要从数据库中有多个结果的地方选择最近的价格,即使最近的比旧的更贵.

例如我可能有这样的数据:

  • 类(class)、价格、日期
  • suv,100,今天
  • suv,121,今天
  • suv,49,3 天前
  • 小型货车,89,昨天
  • 小型货车,120,昨天
  • 小型货车,100,昨天
  • 小型货车,91,3 天前
  • 小型货车,77,3 天前
  • 等等

我想运行一个查询来获取以下数据:

  • suv,100,今天
  • 小型货车,89,昨天
  • 等等

如果我执行如下查询:

SELECT * FROM data
ORDER BY class, date DESC, price;

然后每个类的最顶行包含正确的数据。我只需要知道如何让数据库只返回那些行并丢弃其余行。

我使用的是相当严密锁定的 MySQL 数据库,创建临时表不是一种选择。

更新添加:

上面是正在运行的 reql 查询的高度简化版本。真正的查询确实连接了几个表,看起来更像这样:

SELECT hc.companyname AS supplier, 
sr.pricedetails AS price,
sr.matchedsipp AS class,
sr.cardetails AS cardetails,
CAST(sj.jobdate AS DATE) AS jobdate
FROM searchdetails sd
STRAIGHT_JOIN searchresults sr ON (
sd.taskid = sr.taskid
AND sd.locationid = sr.locationid
AND sd.jobid = sr.jobid
AND sd.companyid = sr.companyid
)
JOIN hirecompanies hc ON sr.companyid = hc.companyid
JOIN locations lc ON lc.locationid = sd.locationid
JOIN searchjobs sj ON sr.jobid = sj.jobid
WHERE DATE(sd.pudate) = '2010-12-28'
AND DATE(sd.dodate) = '2011-01-04'
AND hc.countrycode = 'GB'
AND lc.iata = 'MAN';

pudate 是取件日期,dodate 是送件日期。所有时态数据都使用 DATETIME 字段存储。

最佳答案

这应该为每种车型的最近搜索日期生成最低价格:

 SELECT * FROM data D1
WHERE NOT EXISTS
(SELECT * FROM data D2 WHERE D2.class = D1.class
AND (D2.date > D1.date
OR (D2.date = D1.date AND D2.price < D1.price)))

你有多少数据(这对大量数据来说不是特别有效)?

关于sql - MySQL查询以获取每个分类的最新和最便宜的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com