我有一条@a与另一条线相交的线@b.当我取交点并检测它是否/在哪里与@b相交时,它返回false
declare @a GEOMETRY = Geometry::STGeomFromText('LINESTRING (-83 24, -80.4907132243685 24.788632986627039)', 4326)
declare @b GEOMETRY = Geometry::STGeomFromText('LINESTRING (-74.7 21.8, -75.7 22.1, -77.8 22.6, -79.4 23.3, -80.4 24.5, -81.5 28, -84 33, -87 36)', 4326)
DECLARE @intersectionPoint geometry = @a.STIntersection(@b) -- POINT (-80.49071322436852 24.788632986627078)
IF @intersectionPoint IS NULL
THROW 50000, '@intersectionPoint not found', 1
-- Expect 1, Result 0
SELECT @b.STIntersects(@intersectionPoint)
Run Code Online (Sandbox Code Playgroud) 我有一个以下格式的表格
Id StartDate EndDate Type
1 2012-02-18 2012-03-18 1
1 2012-03-17 2012-06-29 1
1 2012-06-27 2012-09-27 1
1 2014-08-23 2014-09-24 3
1 2014-09-23 2014-10-24 3
1 2014-10-23 2014-11-24 3
2 2015-07-04 2015-08-06 1
2 2015-08-04 2015-09-06 1
3 2013-11-01 2013-12-01 0
3 2018-01-09 2018-02-09 0
Run Code Online (Sandbox Code Playgroud)
我在这里找到了类似的问题,但没有找到可以帮助我解决问题的问题。我想合并具有相同行Id,Type和重叠的日期时间。
上表的结果应为
Id StartDate EndDate Type
1 2012-02-18 2012-09-27 1
1 2014-08-23 2014-11-24 3
2 2015-07-04 2015-09-06 1
3 2013-11-01 2013-12-01 0
3 2018-01-09 2018-02-09 0
Run Code Online (Sandbox Code Playgroud)
在另一台服务器上,我能够做到以下限制和以下查询:
Type列,而是在Id …是否存在生成数字作为输出的散列函数之类的东西?
基本上 - 我需要在我的 SQL Server 中创建一个关键列,它是确定性的(结果是可重复的)并且基于数据库中的 3 列。此列将用作将进入远程系统的那条数据的键(我将使用此键来匹配在外部系统中创建的数据备份)。
对于类似的事情,我一直在使用 SHA5 散列算法来创建我的密钥,但是我目前正在处理的数据必须是数字。
有任何想法吗?结果必须是可重复的,因此必须基于输入列。
我们目前正在开发一个Web应用程序,它可以处理位于数据库表中的大量存档数据.表中的数据行由一个唯一的行ID,两个标识机器和数据点的ID,一个值和一个时间戳组成.每当值更改超过给定阈值时,每台机器都会将其数据发送到此表.该表通常包含数百万到数亿个条目.
出于可视化目的,我创建了一个存储过程,该过程获取识别机器和数据点所需的两个ID,以及开始和结束日期时间.然后它将开始和结束之间的值聚合成可变长度的块(通常为15分钟,1小时,7天等),并返回给定时间间隔内每个块的平均值,最小值和最大值.
该方法有效,但即使有大量的数据库优化和索引,也需要花费大量时间.因此,在前端图表页面上显示所选范围和机器的数据大约需要10到60秒,我认为这太多了.
所以我开始考虑创建一个新表,其中包含每个"chunk"的每台机器的预聚合数据.为了实现这一点,必须[chunksize]每台机器每分钟/小时/天自动调用聚合过程.然后可以从更精细的块等容易地创建更粗糙的块.据我所知,这将极大地加速整个事物.
问题是:实现定期聚合的最佳方法是什么?有没有办法让数据库自己完成工作?或者我是否必须在ASP.NET MVC Web应用程序中实现基于计时器的解决方案?后者需要Web应用程序始终运行,这可能不是最佳方式,因为它可能因各种原因而停机.另一种选择是独立的应用程序或服务来处理这项任务.还有其他我没想过的方法吗?你会如何解决这个问题?
我正在编写一个使用MySQL C API连接数据库的C++应用程序.MySQL服务器版本是5.6.19-log.
我需要运行一些SQL UPDATE,INSERT并且DELETE在一个事务中的语句,以确保应用要么全部改变或没有变化.
我在docs函数中找到mysql_commit()并mysql_rollback()完成事务(提交或回滚),但我找不到启动事务的相应函数.
有这样的功能吗?我错过了一些明显的东西吗
我运行UPDATE,INSERT并DELETE使用mysql_real_query()函数语句.
我想我应该能够通过START TRANSACTION使用相同的mysql_real_query()函数运行SQL语句来启动事务.然后我应该能够通过COMMIT使用相同的mysql_real_query()函数运行SQL语句来提交事务.
但是,在API 中使用专用mysql_commit()和mysql_rollback()函数有什么意义呢?
我有一个数据库,有两个表Ads和Images. 表中有一个主键adid,Ads它是表中的外键Images。
我想在表上创建一个约束,表Images中adid最多可以存储5 个Images。
我需要知道这种类型的约束被称为什么,以及如何通过 SQL Server 中的查询来实现这一点。
我有一个表格,其中包含以下值:
Name Order Innings
Suresh 1 1
Ramesh 2 1
Sekar 3 1
Raju 1 2
Vinoth 2 2
Ramu 3 2
Run Code Online (Sandbox Code Playgroud)
我希望结果如下:
1stInn 2ndInn Order
Suresh Raju 1
Ramesh Vinoth 2
Sekar Ramu 3
Run Code Online (Sandbox Code Playgroud)
我ROW_NUMBER()在SQL Server中使用了结果.
我想在SQL Compact中获得相同的结果,但我无法ROW_NUMBER()在SQL Compact中使用.
我正在使用SQL Compact版本 - 4.0.8482.1
我怎样才能得到结果?
我们想要改变将值从PHP传递到存储过程(T-SQL)的方式.我只有很少的PHP经验,但我会尝试通过与我们的Web开发人员的讨论来解释这个过程.
当前流程
示例测试表
为了更新记录,例如本例中的Field3,我们将所有现有值传递回存储过程.
EXEC dbo.UpdateTest @ID = 1, @Field1 = 'ABC', @Field2 = 'DEF', @Field3 = 'GHI', @Field4 = 'JKL'
Run Code Online (Sandbox Code Playgroud)
让我们说更新Field3,你必须单击一个按钮.这将导航到一个新页面,该页面将运行存储过程以更新数据.由于新页面不知道值,因此必须运行一个SELECT过程以在运行之前检索值UPDATE.
然后,该脚本将用户重定向回重新加载更新数据的页面,并且更改将反映在屏幕上.
新进程
我们想要做的只是传递我们想要改变的字段.
EXEC dbo.UpdateTest @ID = 1, @Field2 = 'DEF', @Field3 = 'GHI'
Run Code Online (Sandbox Code Playgroud)
我们的解决方案很简单 首先,我们将所有可更新字段设置为可选(因此NULL可以传递).然后我们检查参数是否NULL(未通过),如果是,那么我们忽略它,如果不是,我们更新它.
UPDATE
dbo.Test
SET
Field1 = NULLIF(ISNULL(@Field1,Field1),'-999')
,Field2 = NULLIF(ISNULL(@Field2,Field2),'-999')
,Field3 = NULLIF(ISNULL(@Field3,Field3),'-999')
,Field4 = NULLIF(ISNULL(@Field4,Field4),'-999')
WHERE
ID = @ID
Run Code Online (Sandbox Code Playgroud)
但是,我们仍然希望程序来更新数据库记录NULL,如果一个NULL值被通过.解决方法是将任意值分配给相等NULL(在本例中为-999),以便在NULL传递任意值(-999)时更新过程.
这个解决方案相当混乱,在我看来,这是一种解决问题的低效方法.还有更好的解决方案吗?我们做错了什么?
非常感谢任何回复
假设一个简单的表定义为:
CREATE TABLE Table1
(
[ID] [bigint] NOT NULL IDENTITY(1, 1) NOT FOR REPLICATION,
[State] [tinyint] NOT NULL DEFAULT ((0))
)
ALTER TABLE Table1 ADD CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ([ID])
CREATE NONCLUSTERED INDEX [IX_NC_F_Media_StateNotDeleted] ON Table1 ([State]) WHERE ([State]<>(2))
CREATE NONCLUSTERED INDEX [IX_NC_F_Media_State] ON Table1 ([State]) WHERE ([State]=(0))
Run Code Online (Sandbox Code Playgroud)
值插入如下:
250000 rows with State = 0
1000 rows with State = 5
Run Code Online (Sandbox Code Playgroud)
以下查询及其各自的执行计划:
declare @mID int = 400000;
select State
from Table1
where (ID = @mID and State in (0, …Run Code Online (Sandbox Code Playgroud) 我有一个 Django REST API,使用 PostgreSQL 数据库,包含数百万个项目。这些项目由多个系统处理,处理详细信息被发送回并存储在记录表中。简化模型为:
class Item(models.Model):
details = models.JSONField()
class Record(models.Model):
items = models.ManyToManyField(Item)
created = models.DateTimeField(auto_created=True)
system = models.CharField(max_length=100)
status = models.CharField(max_length=100)
details = models.JSONField()
Run Code Online (Sandbox Code Playgroud)
我想对 Items 表进行任意过滤并获取各种处理系统的摘要。此摘要获取每个系统的每个选定项目的最新状态,并显示每个状态的计数。例如,如果我过滤 1055 个项目,则返回的示例为:
{
System_1: [running: 5, completed: 1000, error: 50],
System_2: [halted: 55, completed: 1000],
System_3: [submitted: 1055]
}
Run Code Online (Sandbox Code Playgroud)
我目前正在执行如下查询,它返回 System_1 的处理状态计数,并对其他系统重复并打包到 JSON 返回中。
Item.objects.filter(....).annotate(
system_1_status=Subquery(
Record.objects.filter(
system='System_1',
items__id=OuterRef('pk')
).order_by('-created').values('status')[:1]
)
).values('system_1_status').annotate(count=Count('system_1_status'))
Run Code Online (Sandbox Code Playgroud)
这将转换为 sql 查询:
SELECT
"api_item"."id",
"api_item"."details",
(
SELECT
U0."status"
FROM
"api_record" U0
INNER JOIN
"api_record_items" …Run Code Online (Sandbox Code Playgroud) sql ×9
sql-server ×8
t-sql ×3
asp.net-mvc ×1
c# ×1
c++ ×1
database ×1
django ×1
geography ×1
geometry ×1
hash ×1
key ×1
mysql ×1
performance ×1
php ×1
postgresql ×1
row-number ×1
transactions ×1