【问题标题】:MySQL select orderby date returns duplicate valuesMySQL select orderby date 返回重复值
【发布时间】:2020-03-10 03:01:52
【问题描述】:

我想了解每个用户以及他们最后一次付款。我在这里有两张桌子usersfinances。我尝试添加 groupby 并得到了我想要的结果,但是它获得了另一个表中最旧的记录。有谁知道我怎么能做到这一点?

我的第一个查询

SELECT users.name, users.email, users.phone, users.parent_id, users.section_id, finances.amount, finances.description, schoolyears.name, finances.date 
from users 
JOIN finances on users.id = finances.user_id 
JOIN schoolyears on users.school_id = schoolyears.school_id 
ORDER BY finances.date DESC;

我得到的结果

+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+
| name            | email                        | phone              | parent_id | section_id | amount | description  | name         | date       |
+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+
| Madelynn Stokes | moore.dominic@cartwright.com | +63 (971) 659-8143 |        10 |       NULL | 1000   | New Payables | SY-2019-2020 | 2019-11-14 |
| Annamarie Morar | emile99@hotmail.com          | (0997) 212-7919    |         3 |       NULL | 500    | New Pays     | SY-2019-2020 | 2019-11-14 |
| Madelynn Stokes | moore.dominic@cartwright.com | +63 (971) 659-8143 |        10 |       NULL | 5000   | Old Payables | SY-2019-2020 | 2019-11-13 |
| Annamarie Morar | emile99@hotmail.com          | (0997) 212-7919    |         3 |       NULL | 200    | Old Pays     | SY-2019-2020 | 2019-11-13 |
+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+

我只想要其他表中的最新记录。新应付款和新付款。

我尝试了第二个查询

SELECT users.name, users.email, users.phone, users.parent_id, users.section_id, finances.amount, finances.description, schoolyears.name, finances.date 
from users 
JOIN finances on users.id = finances.user_id 
JOIN schoolyears on users.school_id = schoolyears.school_id 
GROUP BY users.id 
ORDER BY finances.date DESC;

它有效,但我得到了最古老的记录。

+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+
| name            | email                        | phone              | parent_id | section_id | amount | description  | name         | date       |
+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+
| Madelynn Stokes | moore.dominic@cartwright.com | +63 (971) 659-8143 |        10 |       NULL | 5000   | Old Payables | SY-2019-2020 | 2019-11-13 |
| Annamarie Morar | emile99@hotmail.com          | (0997) 212-7919    |         3 |       NULL | 200    | Old Pays     | SY-2019-2020 | 2019-11-13 |
+-----------------+------------------------------+--------------------+-----------+------------+--------+--------------+--------------+------------+

【问题讨论】:

  • 该 GROUP BY 无效,它不会在较新的 MySQL 版本上执行(除非在兼容模式下)。您通常 GROUP BY 与您 SELECT 相同的列,除了那些是设置函数的参数的列。
  • 您使用的是哪个 MySQL 版本?
  • MariaDB 10.3.1,phpMyAdmin 4.9.0.1,PHP 7.3.7

标签: mysql sql mariadb-10.3


【解决方案1】:

你可以试试下面-

DEMO

SELECT users.name, users.email, users.phone, users.parent_id, users.section_id, finances.amount, finances.description, schoolyears.name, finances.dateval 
from users 
JOIN finances on users.id = finances.user_id 
JOIN schoolyears on users.school_id = schoolyears.school_id 
where finances.dateval=
(select max(dateval) from finances f where finances.user_id=f.user_id)

【讨论】:

  • 您确实应该在发布查询之前 对其进行测试。
  • 谢谢先生!先生,您能解释一下您做了什么吗?
  • @Vince,有一个语法错误兄弟 :) 而不是我使用 'on' 的地方 :)
  • 我正在尝试将其转换为 laravel 查询构建器,但这很难哈哈
猜你喜欢
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
相关资源
最近更新 更多