【发布时间】:2023-03-22 06:40:01
【问题描述】:
存储历史记录的钓鱼数据库。但是,当某人有联合记录时,我想恢复到第一次捕获作为真实记录。
select *
from T
inner join (select Type,
Name,
max(TotDrams) as maxdrams
from T
WHERE Type='Common Bream'
group by Type, Name
) sq on T.Type = sq.Type
and T.Name = sq.Name
and sq.maxdrams = T.TotDrams
ORDER BY Ranking ASC
上面返回每个名称的最佳捕获的所有时间记录,但是当记录是联合时,它自然会返回附加记录。我只想将最早的日期记录包含在所有时间记录中。
有没有办法修改上面的代码来删除额外的联合记录,只选择最早记录的?
Fishname Rank Weight Angler Date
Slimey Rank 1 2 lb 3 oz John Budd 30/11/2013
Fishy Rank 2 1 lb 15 oz Chris Clot 12/01/2009
Scales Rank 3 1 lb 12 oz John Budd 21/03/2014
Scales Rank 3 1 lb 12 oz Harry White 01/04/2002
对于上面的例子 - 这是目前正在发生的事情,我想删除 John Budd 的联合记录,因为它是联合的,而不是原始记录。
另一个注意事项:- 此 SQL 将与 php 一起使用。
【问题讨论】:
-
T 有 ID 列吗?
-
你能提供表格的样本数据吗?
-
不,它没有。我有一个 SQL Fiddle 设置。不同的字段名称但相同的最终结果。零条目的记录也会产生这个问题,但我有一个计划。如果您查看结果并看到排名 2 的三个人的记录相同 - 完美的问题 :) sqlfiddle.com/#!2/9d09cd/1
-
你能解释一下为什么 john budd 会被移除吗?是不是因为你只想要他钓到的中奖鱼,所以每人一张记录?还是其他标准?
-
这个数据集需要标准化。