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