小编Vla*_*nov的帖子

STIntersection结果是STIntersects = 0

我有一条@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)

sql sql-server floating-point geometry geography

8
推荐指数
1
解决办法
154
查看次数

如果日期列在TSQL中重叠,则合并行

我有一个以下格式的表格

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)

我在这里找到了类似的问题,但没有找到可以帮助我解决问题的问题。我想合并具有相同行IdType和重叠的日期时间。

上表的结果应为

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 t-sql sql-server sql-server-2008

8
推荐指数
1
解决办法
278
查看次数

SQL Server 中的数字散列函数?

是否存在生成数字作为输出的散列函数之类的东西?

基本上 - 我需要在我的 SQL Server 中创建一个关键列,它是确定性的(结果是可重复的)并且基于数据库中的 3 列。此列将用作将进入远程系统的那条数据的键(我将使用此键来匹配在外部系统中创建的数据备份)。

对于类似的事情,我一直在使用 SHA5 散列算法来创建我的密钥,但是我目前正在处理的数据必须是数字。

有任何想法吗?结果必须是可重复的,因此必须基于输入列。

sql sql-server hash key sql-server-2012

7
推荐指数
1
解决办法
1万
查看次数

DB中自动数据聚合的最佳方法

我们目前正在开发一个Web应用程序,它可以处理位于数据库表中的大量存档数据.表中的数据行由一个唯一的行ID,两个标识机器和数据点的ID,一个值和一个时间戳组成.每当值更改超过给定阈值时,每台机器都会将其数据发送到此表.该表通常包含数百万到数亿个条目.

出于可视化目的,我创建了一个存储过程,该过程获取识别机器和数据点所需的两个ID,以及开始和结束日期时间.然后它将开始和结束之间的值聚合成可变长度的块(通常为15分钟,1小时,7天等),并返回给定时间间隔内每个块的平均值,最小值和最大值.

该方法有效,但即使有大量的数据库优化和索引,也需要花费大量时间.因此,在前端图表页面上显示所选范围和机器的数据大约需要10到60秒,我认为这太多了.

所以我开始考虑创建一个新表,其中包含每个"chunk"的每台机器的预聚合数据.为了实现这一点,必须[chunksize]每台机器每分钟/小时/天自动调用聚合过程.然后可以从更精细的块等容易地创建更粗糙的块.据我所知,这将极大地加速整个事物.

问题是:实现定期聚合的最佳方法是什么?有没有办法让数据库自己完成工作?或者我是否必须在ASP.NET MVC Web应用程序中实现基于计时器的解决方案?后者需要Web应用程序始终运行,这可能不是最佳方式,因为它可能因各种原因而停机.另一种选择是独立的应用程序或服务来处理这项任务.还有其他我没想过的方法吗?你会如何解决这个问题?

c# sql-server asp.net-mvc stored-procedures sql-server-2012

7
推荐指数
1
解决办法
1552
查看次数

如何启动mysql_commit()将提交的MySQL事务

我正在编写一个使用MySQL C API连接数据库的C++应用程序.MySQL服务器版本是5.6.19-log.

我需要运行一些SQL UPDATE,INSERT并且DELETE在一个事务中的语句,以确保应用要么全部改变或没有变化.

我在docs函数中找到mysql_commit()mysql_rollback()完成事务(提交或回滚),但我找不到启动事务的相应函数.

有这样的功能吗?我错过了一些明显的东西吗


我运行UPDATE,INSERTDELETE使用mysql_real_query()函数语句.

我想我应该能够通过START TRANSACTION使用相同的mysql_real_query()函数运行SQL语句来启动事务.然后我应该能够通过COMMIT使用相同的mysql_real_query()函数运行SQL语句来提交事务.

但是,在API 中使用专用mysql_commit()mysql_rollback()函数有什么意义呢?

c++ mysql sql transactions

7
推荐指数
1
解决办法
2085
查看次数

对表的约束以限制要存储的记录数

我有一个数据库,有两个表AdsImages. 表中有一个主键adidAds它是表中的外键Images

我想在表上创建一个约束,表Imagesadid最多可以存储5 个Images

我需要知道这种类型的约束被称为什么,以及如何通过 SQL Server 中的查询来实现这一点。

sql database sql-server

7
推荐指数
1
解决办法
5480
查看次数

如何为ROW_NUMBER()获取替代值?

我有一个表格,其中包含以下值:

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

我怎样才能得到结果?

sql sql-server row-number sql-server-ce sql-server-ce-4

7
推荐指数
1
解决办法
203
查看次数

SQL更新可选参数PHP

我们想要改变将值从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)时更新过程.

这个解决方案相当混乱,在我看来,这是一种解决问题的低效方法.还有更好的解决方案吗?我们做错了什么?

非常感谢任何回复

php sql t-sql sql-server stored-procedures

7
推荐指数
1
解决办法
269
查看次数

需要帮助了解一些执行计划

假设一个简单的表定义为:

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)

sql t-sql sql-server

7
推荐指数
1
解决办法
200
查看次数

Django + PostgreSQL 提高慢速摘要聚合性能的最佳方法?

语境

我有一个 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 django postgresql performance django-rest-framework

7
推荐指数
1
解决办法
1070
查看次数