【发布时间】:2014-02-12 21:36:46
【问题描述】:
这是交易。
我的数据库表有很多列。这 4 个是我特别要关注的:
BOL_NUMBER, CONTAINER_NUMBER, WORKFLOW, WORKFLOW_DATESTAMP
一个 BOL_NUMBER 可能有多个 CONTAINER_NUMBER,具有不同的 WORKFLOW(一个 CONTAINER_NUMBER 只能有一个 BOL_NUMBER)。每次更新 CONTAINER_NUMBER 的 WORKFLOW 时,WORKFLOW_DATESTAMP 使用 MySQL 语法 NOW() 记录它的更新日期和时间。
当用户搜索 BOL_NUMBER(我的测试 BOL_NUMBER 是 AAAA111111)时,该表返回 3 个 BOL_NUMBER,所有这些都包含 3 个不同的 CONTAINER_NUMBER。
当前搜索返回此数据:
BOL_NUMBER CONTAINER_NUMBER WORKFLOW WORKFLOW_DATESTAMP
AAAA111111 TRLU1234567 UNASSIGNED 2014-01-21 12:00
AAAA111111 MAXU7894561 UNASSIGNED 2014-01-21 12:00
AAAA111111 CMAU6543217 UNASSIGNED 2014-01-21 12:00
此时,当 CONTAINER_NUMBER 的条件正确时,用户可以将 WORKFLOW 更新为 FULLY DISPATCHED。对于这种情况,我将使用 CONTAINER_NUMBER TRLU1234567。
当 CONTAINER_NUMBER 已更新时,用户可以执行另一次搜索以验证 WORKFLOW 是否确实已更新。
这是 CONTAINER_NUMBER TRLU1234567 更新后的搜索结果:
BOL_NUMBER CONTAINER_NUMBER WORKFLOW WORKFLOW_DATESTAMP
AAAA111111 TRLU1234567 UNASSIGNED 2014-01-21 12:00
AAAA111111 TRLU1234567 FULLY DISPATCHED 2014-01-23 02:00
AAAA111111 MAXU7894561 UNASSIGNED 2014-01-21 12:00
AAAA111111 CMAU6543217 UNASSIGNED 2014-01-21 12:00
正如您在上面的示例中看到的,现在有 2 个 CONTAINER_NUMBER TRLU1234567 实例。 请注意:这样做的原因是跟踪 WORKFLOW 的更新时间
话虽如此,我不想退回重复的 CONTAINER_NUMBER。我只想显示最近的 WORKFLOW_DATESTAMP。
基本上,当用户搜索 BOL_NUMBER AAAA111111 时,它应该只返回以下内容:
BOL_NUMBER CONTAINER_NUMBER WORKFLOW WORKFLOW_DATESTAMP
AAAA111111 TRLU1234567 FULLY DISPATCHED 2014-01-23 02:00
AAAA111111 MAXU7894561 UNASSIGNED 2014-01-21 12:00
AAAA111111 CMAU6543217 UNASSIGNED 2014-01-21 12:00
数据库表将有 4 个 BOL_NUMBER AAAA111111 实例,但仅显示 3 个,如上所示,基于 WORKFLOW_DATESTAMP。
我希望我在这里很清楚。
这是我一直在尝试使用的代码:
SELECT DISTINCT
BOL_NUMBER,
CONTAINER_NUMBER,
WORKFLOW,
MAX(WORKFLOW_DATESTAMP)
FROM
main_table
WHERE
BOL_NUMBER = 'AAAA111111'
GROUP BY
BOL_NUMBER, CONTAINER_NUMBER;
但是当我使用上面的代码时,我只返回原始的 3 个 CONTAINER_NUMBER 和未分配的工作流。即使数据库表有 4 个 BOL_NUMBER 实例。
我从 SELECT 语句中取出了 DISTINCT,但这给了我相同的结果。
当我删除 GROUP BY 子句时,它只返回 1 条具有最新 WORKFLOW_DATESTAMP 的记录,但在 WORKFLOW 列中显示 UNASSIGNED。
我希望我在这里很清楚。基本上,如果用户搜索 BOL_NUMBER,代码将检查重复的 CONTAINER_NUMBER,检查哪个具有最新的 WORKFLOW_DATESTAMP,并显示该记录以及其他不重复的记录。
我认为我没有比这更清楚的了。
请帮忙。
提前谢谢你。
【问题讨论】:
-
这张表有唯一的键吗?
标签: mysql select duplicates