mysql - 如何查询 Feed 表中的最新项目

标签 mysql sql group-by

有一个名为client_application 的表,其中包含类似这样的数据;

Id   user_id   name      creationDate
---------------------------------------
1    5         name1     date
2    4         name2     date
3    98        name3     date

还有一个名为 application_status 的表,其中包含应用程序的状态提要(application_id 是外键);

Id   aplication_id   status            other_columns      creationDate
----------------------------------------------------------------------
1    1       APPLICATION_SUMITTED      data               date
2    2       APPLICATION_SUMITTED      data               date
3    1       APPLICATION_RECEVIED      data               date
4    1       BANK_APPROVED             data               date
5    3       APPLICATION_SUMITTED      data               date
6    2       APPLICATION_RECEVIED      data               date

我想通过他们的状态查询应用程序。例如获取最新提交的申请?或获得银行批准的申请。

如何实现这样的 SQL 查询?

我试过了;

SELECT *
FROM (SELECT * FROM application_status ORDER BY creationDate DESC) t1
LEFT JOIN client_application on client_application.id = t1.application_id
GROUP BY t1.application_id;

这很好,我可以获得应用程序的最新状态,但是当我尝试在其中放置一个 where 子句时;

SELECT *
FROM (SELECT * FROM application_status ORDER BY creationDate DESC) t1
LEFT JOIN client_application on client_application.id = t1.application_id
where t1.status = 'APPLICATION_SUBMITTED'
GROUP BY t1.application_id;

它返回所有 application_status 具有 APPLICATION_SUBMITTED 状态列.. 它返回 application_id 1 项(检查上表)但如您所见,ID 号为 1 的应用程序具有 APPLICATION_RECEIVED 状态作为最新状态项。所以我不会在结果集中期待这个。

也许我的方法是完全错误的。我愿意接受任何解决方案。

谢谢。

最佳答案

我的建议是通过创建一个新表 'Status' 来改进数据库的设计,例如:

Id   Label
1    APPLICATION_SUBMITTED
2    APPLICATION_RECEIVED
3    BANK_APPROVED 

你必须给标签一个逻辑顺序,你在你的状态或主表中引用这个表。

检索申请的状态会更容易(其中 Status.Id < 3 选择所有未批准的申请,或者 Status.Id > 1 选择所有至少已收到的申请)。

也更利于维护。这种逻辑适用于很多情况,你应该考虑多花点时间来设计你的数据模型,这样你就不会花更多的时间来解决你现在面临的这种问题。

关于mysql - 如何查询 Feed 表中的最新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584863/

相关文章:

python - Groupby pandas 系列中具有相同键的连续元素

group-by - Sequelize group by 与关联包括 id

python - Python 中 MySQLdb 模块的手册页在哪里?

mysql - 选择有很多表的情况

sql - 为什么这不使用索引?

php - 过滤一列上的多个值。所有值都必须存在,否则返回零

php - OsTicket + IIS + mySQL + 极慢的查询

php - 将 AJAX 值返回到 Javascript 变量

sql - 在oracle上创建空间索引

datetime - Pandas:分组并使用日期时间进行转换