Sql 使用列的组合获取最大数量

Sql 使用列的组合获取最大数量,sql,sql-server,performance,optimization,Sql,Sql Server,Performance,Optimization,我有一个表,表中有AutoID、Number、Name、City、State、Country等列 我想要的是在“数字”栏中输入的最大数字,包括姓名、城市、州和国家 例如: Name City State Country Smith NY NY USA John NY NY USA John NJ NY USA 现在史密斯应该得到“数字”1,约翰2,再次约翰(在新泽西州)1

我有一个表,表中有AutoID、Number、Name、City、State、Country等列

我想要的是在“数字”栏中输入的最大数字,包括姓名、城市、州和国家

例如:

Name     City     State     Country
Smith    NY      NY         USA
John     NY       NY        USA
John     NJ       NY        USA
现在史密斯应该得到“数字”1,约翰2,再次约翰(在新泽西州)1,因为他是第一个从新泽西州

我可以简单地在查询中放入where子句,并获得最大值+1。但问题是,当我有大量的数据和用户数量增加时,我的查询速度会非常慢。我还在同一个表中插入数据,以便它继续堆积

我希望我已经说清楚了


Vipul Parekh

我猜这就是你想要的:

Name     City     State     Country    Number
Smith    NY      NY         USA           1
John     NY       NY        USA           2
John     NJ       NY        USA           1
这由
行编号()提供。


请注意,
编号
在组中的顺序是任意的,因为您没有提供
id
createdat
列。不能保证它与表的顺序相同,因为SQL表本身就是无序的。

您可以在表上创建触发器。无论何时插入一行,它都会计算行数,并使用count+1的数字更新最新的一行

为了解决速度慢的问题,您可以创建一个关于姓名、城市、州和国家的索引

如果您需要示例代码或一些指针,请告诉我。

您可以使用

(一) 使用Optimize_CTE(id、cityid、stateid、countryid) 作为

--定义CTE查询。 (

)

--定义引用CTE名称的外部查询

选择id, 将(Varchar(255),cityid)转换为cityid, 将(Varchar(255),stateid)转换为stateid, 将(Varchar(255),countryid)转换为countryid
从优化选项(MAXRECURSION 1)

声明@RowsPerPage INT=10,@PageNumber INT=1

选择InvoiceID、CustomerID

来自dbo.SalesInvoice

按发票ID订购

偏移量(@PageNumber-1)*@RowsPerPage行

仅获取下一个@RowsPerPage行


GO

应用了什么顺序?e、 g.
Smith
为什么在纽约领先于
John
?嗨,抱歉告诉你了一半。提取号码不是问题。生成和保存是问题所在。
select name, city,state, country,
       row_number() over (partition by city, state, country order by (select null)) as Number
from table t;
SELECT * FROM
(
Select Name, 
       City, 
       State, 
       Country,
       Row_Number() over (Partition by City, State, Country ORDER BY Name) AS Number
From table1
) AS T
SELECT id,  cityid,stateid, countryid
FROM Optimize
WHERE id IS NOT NULL