在本文中,我们将给您介绍关于SQLServerrand的详细内容,并且为您解答聚合的相关问题,此外,我们还将为您提供关于MSSQLServer与MySQLFIELD()函数有什么相似之处?、MySQL
在本文中,我们将给您介绍关于SQL Server rand的详细内容,并且为您解答聚合的相关问题,此外,我们还将为您提供关于MS SQL Server与MySQL FIELD()函数有什么相似之处?、MySQL Server and Server-Startup Programs、SQL Server - SQL Server 2019 启用SQL Server验证Super Administrator(sa)用户登录、SQL Server 5中Lead()函数的替代方法的知识。
本文目录一览:- SQL Server rand()聚合(sql server聚合函数)
- MS SQL Server与MySQL FIELD()函数有什么相似之处?
- MySQL Server and Server-Startup Programs
- SQL Server - SQL Server 2019 启用SQL Server验证Super Administrator(sa)用户登录
- SQL Server 5中Lead()函数的替代方法
SQL Server rand()聚合(sql server聚合函数)
问题:
经纬度坐标表。两行可能具有相同的坐标。我们想要一个查询,该查询返回一组具有唯一坐标的行(在返回的行内)。请注意,这distinct
是不可用的,因为我需要返回根据定义不同的id列。这类工作(@maxcount
是我们需要的行数,intid
是唯一的intid列):
select top (@maxcount) max(intid)from Documents dgroup by d.geoLng, d.geoLat
不幸的是,对于给定的坐标,它将始终返回同一行,这对我来说有点可惜。如果只有rand()
聚合,则可以使用max()
…来代替。请注意,您不能将其max()
与一起使用newid()
。
有任何想法吗?(如果您感兴趣的话,这里还有更多背景知识:http :
//www.itu.dk/~friism/blog/ ?p=
121)
更新:完整的解决方案在这里
答案1
您可以通过lat和long的ROW_NUMBER函数为此使用CTE,然后对它使用rand()。就像是:
WITH cte AS( SELECT intID, ROW_NUMBER() OVER ( PARTITION BY geoLat, geoLng ORDER BY NEWID() ) AS row_num, COUNT(intID) OVER (PARTITION BY geoLat, geoLng) AS TotalCount FROM dbo.Documents)SELECT TOP (@maxcount) intID, RAND(intID)FROM cteWHERE row_num = 1 + FLOOR(RAND() * TotalCount)
这将始终返回第一组lat和lngs,但我无法将顺序随机化。也许有人可以继续使用这种方法。但是,它将在匹配的经纬度组合中为您提供随机行。
如果我以后有更多时间,我将尽力解决最后的障碍。
MS SQL Server与MySQL FIELD()函数有什么相似之处?
MySQL提供了一个名为FIELD()的字符串函数,该函数接受可变数量的参数。返回值是第一个参数在其余参数列表中的位置。换一种说法:
FIELD(''d'', ''a'', ''b'', ''c'', ''d'', ''e'', ''f'')
将返回4,因为’d’是第一个参数之后的第四个参数。
此功能提供了根据非常特定的顺序对查询结果进行排序的功能。对于我当前的应用程序,我需要管理四种状态:有效,已批准,已拒绝和已提交。但是,如果仅按状态列排序,我会感觉结果列表的可用性降低了,因为拒绝和活动状态项比已提交和已批准的项更为重要。
在MySQL中,我可以这样做:
SELECT <stuff> FROM <table> WHERE <conditions> ORDER BY FIELD(status, ''rejected'', ''active'',''submitted'', ''approved'')
然后对结果进行排序,以使被拒绝的物品首先出现,然后是活动的物品,依此类推。因此,结果按对访客的重要性降低的顺序排序。
我可以创建一个单独的表,该表枚举状态的重要性级别,然后按降序对查询进行排序,但是自从切换到MS SQL
Server以来,这已经出现了好几次,所以我想询问一下我是否可以使用类似于MySQL的FIELD()的内置函数来避免多余的表和更复杂的查询。
谢谢
大卫·基斯
答案1
小编典典使用CASE表达式(SQL Server
2005+):
ORDER BY CASE status WHEN ''active'' THEN 1 WHEN ''approved'' THEN 2 WHEN ''rejected'' THEN 3 WHEN ''submitted'' THEN 4 ELSE 5 END
您可以使用此语法进行更复杂的评估(包括组合,或者如果需要使用LIKE)
ORDER BY CASE WHEN status LIKE ''active'' THEN 1 WHEN status LIKE ''approved'' THEN 2 WHEN status LIKE ''rejected'' THEN 3 WHEN status LIKE ''submitted'' THEN 4 ELSE 5 END
MySQL Server and Server-Startup Programs
1. mysqld-The MySQL Server
mysqld,also known as mysql server, is the main program that does most of the work in a MySQL installation.
MySQL server manages access to the mysql data dirctory that contains databases and tables,
The data directory is also the default location for other information such as log files and status files.
Note:
Some installation packages contain a debugging versison of the server named mysqld-debug.
invoke this version instead of mysqld for debugging support, memory allocation checking, and trace file support.
When MySQL server starts, it listens for network connections from client programs and manages access to database on behalf of those clients.
The mysqld program has many options that can be specified at startup.
shell> mysqld --verbose --help
SQL Server - SQL Server 2019 启用SQL Server验证Super Administrator(sa)用户登录
SQL Server 2019 启用SQL Server验证Super Administrator(sa)用户登录
在项目开发过程中通常连接SQL Server时需要用SQL Server方式,所以我们需要先开启这种验证方式,然后再根据需要添加项目用户,设定相关权限。
先用Windows身份验证方式连接数据库,然后按照如下几步设置,完成后重启服务,切换验证方式即可使用sa登录。
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
SQL Server 5中Lead()函数的替代方法
您可以使用相关子查询代替无法访问LEAD()
函数:
SELECT
EventID AS ID,CID,Date,(SELECT TOP 1 t2.Date FROM yourTable t2
WHERE t2.CID = t1.CID AND t2.Date > t1.Date
ORDER BY t2.Date) AS ColumnA
FROM yourTable t1
ORDER BY
CID,Date;
Demo
编辑:
您为SQL Server标记了问题,解释了为什么收到此消息以及其他答案。如果您的RDBMS确实是MySQL,请使用以下版本:
SELECT
EventID AS ID,(SELECT t2.Date FROM yourTable t2
WHERE t2.CID = t1.CID AND t2.Date > t1.Date
ORDER BY t2.Date LIMIT 1) AS ColumnA
FROM yourTable t1
ORDER BY
CID,Date;
,
尝试一下:
WITH DataSource AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY [CID] ORDER BY [Date] ASC) AS [RowID]
FROM [Table]
)
SELECT DS1.EventID,DS1.[CID],DS1.[Date],DS2.[Date] AS ColumnA
FROM DataSource DS1
LEFT JOIN DataSource DS2
ON DS1.[RowID] = DS2.[RowID] - 1
今天关于SQL Server rand和聚合的讲解已经结束,谢谢您的阅读,如果想了解更多关于MS SQL Server与MySQL FIELD()函数有什么相似之处?、MySQL Server and Server-Startup Programs、SQL Server - SQL Server 2019 启用SQL Server验证Super Administrator(sa)用户登录、SQL Server 5中Lead()函数的替代方法的相关知识,请在本站搜索。
本文标签: