Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从列唯一的数据库中获取值_Php_Sql_Database - Fatal编程技术网

Php 从列唯一的数据库中获取值

Php 从列唯一的数据库中获取值,php,sql,database,Php,Sql,Database,我需要一个高级SQL查询(MSSQL 2000)的帮助 我有一个名为Result的表格,其中列出了田径100米比赛时间。一个跑步者可以有几次比赛,但我只想展示每个跑步者的最佳时间 结果表包含三列,Result\u id,atternate\u id,Result\u time。因此,当我列出值时,atternate\u id必须是唯一的,result\u time必须是最快(最低)的值 有什么想法吗?您想要的是使用聚合函数。在本例中,min()将从其他选定列中具有相同数据的所有行中选择minum

我需要一个高级SQL查询(MSSQL 2000)的帮助

我有一个名为
Result
的表格,其中列出了田径100米比赛时间。一个跑步者可以有几次比赛,但我只想展示每个跑步者的最佳时间

结果表包含三列,
Result\u id
atternate\u id
Result\u time
。因此,当我列出值时,
atternate\u id
必须是唯一的,
result\u time
必须是最快(最低)的值


有什么想法吗?

您想要的是使用聚合函数。在本例中,
min()
将从其他选定列中具有相同数据的所有行中选择minumin数据。这意味着您还必须向我们提供group by子句。下面的查询将为您提供所需的结果

编辑:如果需要其他列,只需将它们放入
select
子句中,然后将它们添加到
groupby
子句中,如下所示:

按althlete\u id、result\u id从结果表组中选择althlete\u id、result\u id、min(result\u time)作为结果时间

按althlete\u id、race\u日期、result\u id从结果表组中选择althlete\u id、result\u id、min(result\u time)作为结果时间、比赛日期

编辑:您需要将不属于聚合函数的所有列添加到
group by
。聚合函数包括
min()
max()
avg()


简短回答:如果不将列放在括号中,它可能必须位于group by中。

在SQL Server 2000中,您不能使用windows函数。您可以按如下方式执行此操作:

select r.*
from result r join
     (select athlete_id, min(result_time) as mintime
      from result r
      group by athlete_id
     ) rsum
     on rsum.athlete_id = r.athlete_id and r.time = rsum.mintime

在较新版本的SQL Server中,您将使用row_number()。

如果您只需要为每个
运动员id
使用最快的时间,请执行以下操作:

select athelete_id, min(result_time) as FastestTime
from result
group by athelete_id
要显示
结果
表中的其他列,可以按如下方式重新连接到该表:

select r.*
from result r
inner join (
    select athelete_id, min(result_time) as FastestTime
    from result
    group by athelete_id
) rm on r.athelete_id = rm.athelete_id and r.result_time = rm.FastestTime

你所说的windows功能是什么意思?当您只需要一个聚合函数时,为什么要连接到同一个表呢?Windows函数是使用“over”statement(通常后跟“partition by”和/或“order by”)的函数的一个名称。SQL Server 2005及以后版本除了支持其他聚合函数外,还支持将行数()、秩()、稠密秩()和ntile()作为特殊函数。为windows函数的解释干杯:)不过,如果他只需要一列的最小值,为什么要对自身进行联接?我根本没有太多地使用SQLServer,但是可以肯定的是,查询可以是一个简单的聚合吗?(我不想质问像你这样有代表性的人,但即使是有55K的人似乎也认为简单的汇总也行。)因为我想要结果表中的所有其他内容,比如活动日期。就最短时间而言,其他答案都可以。我确实需要显示结果日期等。但我无法让这一个工作,它仍然显示所有的结果时间。当我删除结果id时,这一点起作用,但我无法回显结果时间,我如何将其包括在“分组依据”中?它已经存在于MIN()函数的“select”中,如果我添加了“groupby”,会不会把事情搞砸?忘了我写的东西,忘了对表进行排序,这个表也不能工作。显示所有结果您可以命名聚合函数。我正在修改我的答案以显示。此答案有效,但如何包括结果日期和显示结果时间?我只能在现场回显运动员身份证moment@Inzajt根据您的问题,没有
result\u date
列。“结果表包含三列,结果id、运动员id、结果时间”很抱歉,我想让您尽可能方便地帮助我。请提供示例数据和所需输出。