Sql 使用列的组合获取最大数量
我有一个表,表中有AutoID、Number、Name、City、State、Country等列 我想要的是在“数字”栏中输入的最大数字,包括姓名、城市、州和国家 例如: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
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