C# 从数据库中查找最大和

C# 从数据库中查找最大和,c#,sql,C#,Sql,我试图从数据库中返回一个在一段时间内拥有最多点数的人 我的数据库表有3个文件:个人、日期和点数 积分将分别添加到个人 我将有大约30人在数据库和无限的点表条目 有人能帮我用SQL查询返回一个人的最大点数吗 我曾想过分两步来做这件事,1,计算每个人在所选时间段内的分数总和,但不知道如何得到分数最多的人 编辑: 我有下面的代码将点输入数据库 OleDbCommand com = new OleDbCommand("INSERT INTO FlightPoints ([Person],

我试图从数据库中返回一个在一段时间内拥有最多点数的人

我的数据库表有3个文件:个人、日期和点数

积分将分别添加到个人

我将有大约30人在数据库和无限的点表条目

有人能帮我用SQL查询返回一个人的最大点数吗

我曾想过分两步来做这件事,1,计算每个人在所选时间段内的分数总和,但不知道如何得到分数最多的人

编辑: 我有下面的代码将点输入数据库

        OleDbCommand com = new OleDbCommand("INSERT INTO FlightPoints ([Person], [Flight], [Date_Added], [Points], [Reason]) VALUES (?, ?, ?, ?, ?)", Program.DB_CONNECTION); // add the information into the database
        com.Parameters.Add(new OleDbParameter("", cadet[CadetcomboBox.SelectedIndex].ID));
        com.Parameters.Add(new OleDbParameter("", cadet[CadetcomboBox.SelectedIndex].Flight.ID));
        com.Parameters.Add(new OleDbParameter("", DateTime.Today));
        com.Parameters.Add(new OleDbParameter("", PointsnumericUpDown.Value));
        com.Parameters.Add(new OleDbParameter("", ReasontextBox.Text));

        com.ExecuteNonQuery();

事实上,两个或两个以上的人可能拥有相同的总分数。如何返回所有具有相同最高分数的人?

如果我正确获得了您的布局,这在SQL Server中是有效的

create table #Points
(
    [Person] varchar(50) not null,
    [Date] DateTime not null,
    [Points] int not null
)

insert into #Points (Person,Date,Points) values ('Hans',GETDATE(),1)
insert into #Points (Person,Date,Points) values ('Hans',GETDATE(),2)
insert into #Points (Person,Date,Points) values ('Hans',GETDATE(),3)
insert into #Points (Person,Date,Points) values ('Hans',GETDATE(),4)
insert into #Points (Person,Date,Points) values ('Fritz',GETDATE(),5)

select top 1 Person, Sum(Points)
from #Points
where Date>='2015-02-26 00:00:00' and Date<='2015-02-26 23:59:59'
group by Person
order by 2 desc

drop table #Points

如果我理解正确,您有两个表,因此:

SELECT TOP 1 PersonName FROM 
(
SELECT  
    PersonName,Points       
FROM
    PersonTable
        INNER JOIN (
            SELECT
                PersonId, SUM(Points) AS Points
            FROM 
                PersonPoint 
            WHERE               
                PointDate BETWEEN @StartDate AND @EndDate
            GROUP BY PersonId               
        ) AS MaxPoints
            ON 
               MaxPoints.PersonId = PersonTable.PersonId
) q
ORDER BY Points DESC
编辑:考虑到两个或两个以上的人可以获得相同的分数,查询结果如下,根据下面的结果,您可以使用光标选择最高分数:


您使用的数据库/SQL风格是什么?你试过什么了吗?如果是,结果如何?但是如果有几个人的总分最高,或者,多人拥有完全相同的点的概率是如此遥远,以至于您只能根据一个人的最大值来确定。我有一个用于人员详细信息的表和一个用于点的表。OleDbCommand com=新建OleDbCommand SELECT person FROM SELECT person,points FROM FlightPoints INNER JOIN SELECT person,SUMPoints作为来自FlightPoints的点,其中PointDate=?按PersonId分组为MaxPoints上的MaxPoints。PersonId=PersonTable.PersonId q按Points DESC排序,Program.DB_连接;OleDbDataReader dr=com.ExecuteReader;如果dr.Read{try{}catch{}dr.Close;好的,这将从最高到最低的累计点检索用户订单。现在,正如您在编辑中所述,您必须扫描结果并返回得分最高的一个或多个用户。前者有什么问题吗?我正在努力理解SQL命令是如何工作的,你能花几分钟时间试着给我解释一下吗?另外,我不知道如何从命令中获得结果,我为不知道太多而道歉,但我正在学习。谢谢。你用的是什么数据库系统?
SELECT PersonName FROM 
(
SELECT  
    PersonName,Points       
FROM
    PersonTable
        INNER JOIN (
            SELECT
                PersonId, SUM(Points) AS Points
            FROM 
                PersonPoint 
            WHERE               
                PointDate  BETWEEN  @StartDate AND @EndDate
            GROUP BY PersonId               
        ) AS MaxPoints
            ON 
               MaxPoints.PersonId = PersonTable.PersonId
) q
ORDER BY Points DESC
SELECT TOP 1 points_person, Sum(points_value)
FROM dbo.points
GROUP BY points_person
ORDER BY Sum(points_value) DESC