【问题标题】:How to get one records that sorted by date如何获取按日期排序的记录
【发布时间】:2017-06-04 08:50:27
【问题描述】:

我有一张这样的桌子:

id    product_id   price      date
1       1001        100     2017-05-29
2       1005        101     2017-03-30
3       1001        102     2017-03-30
4       1003        106     2017-06-07
5       1005        106     2017-04-30

我想按product_id 分组,每个product_id 只能获得一个最新产品。我还有一个最低和最高价格变量,应该应用于price 列。

我的查询结果应该是:

1       1001        100     2017-05-29
4       1003        106     2017-06-07
5       1005        106     2017-04-30

SQL 是否可以,或者我应该使用应用程序端?

【问题讨论】:

  • 您想按日期对行进行排序并仅获取最后一条记录,但您的预期结果显示为 3,并且它们与升序或降序排序无关。请说清楚。
  • 抱歉,最后一条记录s.
  • 最后几条记录?你想使用 laravel 查询生成器还是 eloquent?这是一个简单的 sql 查询。但你需要更好地解释。
  • 我的记录应该按product_id 分组,我有两个值$min$max price,我应该使用between 查询。
  • 每个product_id 的最后记录?同样的product_id 也可能有相同的dates 吗?

标签: php mysql sql laravel laravel-5.3


【解决方案1】:

如果您想按日期排序结果,只需使用orderBy()

Model::orderBy('date_column', 'desc')->whereBetween('price', [$min, $max])->groupBy('product_id')->take(3)->get();

或者是快捷键latest()oldest()

Model::latest('date_column')->...

【讨论】:

  • 您的查询可能会返回两个ids product_id
  • @S.M_Emamian 你没有告诉任何关于分组或between 部分的信息。我可以看到你已经在你的 cmets 中添加了这个,所以我更新了我的答案。
【解决方案2】:

您可以使用subqueries。首先从您的表中按日期顺序选择,然后使用它按product_id 分组:

SELECT * FROM (SELECT * FROM `your_table` t ORDER by date desc) as date_ordered group by product_id ORDER by id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多