AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-116213

Ryan's questions

Martin Hope
Ryan
Asked: 2017-11-07 01:04:15 +0800 CST

计算期间开始和结束日期

  • 1

我的桌子:

Date       Employee     Status
-----------------------------
20171106   001          At work
20171107   001          Sick leave
20171108   001          At work
20171109   001          At work
20171111   001          Sick leave (A gap here)
20171112   001          Sick leave
20171115   001          At work (Another gap)
20171116   001          At work

期望的结果:

Employee      Status        StartDT                       EndDT
-------------------------------------------------------------------
001           At work       Some time in the history      20171106
001           Sick leave    20171107                      20171107
001           At work       20171108                      20171109
001           Sick leave    20171111                      20171112
001           At work       20171115                      20171116

逻辑:我们按状态重新组织源表,而不是按日期。所以日期的差距并不重要,应该被忽略。

如何在 Teradata 15 中执行此操作?

注意:select min(Date), max(Date) group by employee, status;将不起作用,因为两个“工作中”之间的状态可能会发生变化。

teradata
  • 2 个回答
  • 4771 Views
Martin Hope
Ryan
Asked: 2017-08-09 19:54:27 +0800 CST

距离上次充值卡有多久了?

  • 1

我们有一张储值卡表:

CardNo   TransactionType   Amount    TransactionDate(datetime2)
         (1 for Top-up, 0 for purchasing products)
=========================================================
0001        1              1000.00    20170809(only date is displayed for brevity)
0001        0              200.00     20170810
0001        0              300.00     20170811
0001        1              200.00     20170811
0001        0              200.00     20170812

我们想知道每张卡(客户)每次购买与当时最近一次充值之间的时间。所以预期的结果是:

RowID   GapDays
================
1       Null (or 0)
2       1
3       2
4       Null
5       1

为什么 row id 为 3 有 2 天的间隔?

购买发生在充值之前。

日期列的类型为datetime2,具有“时间”部分(为简洁起见此处省略),数据按此排序。您可以使用任何索引。如有必要,将添加不存在的索引。

sql-server sql-server-2008
  • 3 个回答
  • 65 Views
Martin Hope
Ryan
Asked: 2017-07-07 03:39:38 +0800 CST

在 SQL Server 中为滚动总和设置非负下限

  • 5

我需要为滚动和计算设置一个下限。例如,与

PKID    NumValue    GroupID
----------------------------
1       -1          1
2       -2          1
3       5           1
4       -7          1
5       1           2

我想拥有:

PKID   RollingSum    GroupID
----------------------------- ## Explanation: 
1      0             1        ## 0 - 1 < 0  => 0
2      0             1        ## 0 - 2 < 0  => 0
3      5             1        ## 0 + 5 > 0  => 5
4      0             1        ## 5 - 7 < 0  => 0

当添加负数将导致和为负时,将激活限制以将结果设置为零。后续的加法应该基于这个调整后的值,而不是原来的滚动和。

使用加法应该达到预期的结果。如果第四个数字从 -7 变为 -3,则第四个结果应该是 2 而不是 0

如果可以提供一个总和而不是几个滚动数字,那也是可以接受的。我可以使用存储过程来实现非负加法,但这太低级了。

现实生活中的问题是我们将下订单记录为正数,将取消记录为负数。由于连接问题,客户可能会多次单击该cancel按钮,这将导致记录多个负值。在计算我们的收入时,“零”需要作为销售的边界。


这个业务应用程序绝对是愚蠢的,但我对此无能为力。对于这个问题,请仅考虑 DBA 可以使用的解决方案。

我预计GroupID最多每行五十行。

sql-server sql-server-2008
  • 2 个回答
  • 2266 Views
Martin Hope
Ryan
Asked: 2017-06-22 05:56:09 +0800 CST

优化 SSIS 包以减少查询

  • 3

我需要在客户下订单时将他们的订单与他们的“级别”(白银、黄金等)相关联:

CRM server::CRM db::CRM table
----------
CustomerID   PreviousLevel    NewLevel    NewLevelGrantedOn

Order server::Order db::Order table
----------
OrderID     CustomerID    OrderPlacedOn

在 SSIS 包中我这样做了:

  1. 对 Order db 执行 SQL 以提取订单并将它们放入对象变量中;
  2. 使用“foreach 容器”遍历每个订单,我在其中放置了一个数据流任务,该任务select top 1 * where CustomerID = ? and LevelGrantedOn < ? order by LevelGrantedOn desc从 CRM 数据库中提取数据(两个参数都来自第一步),派生一些列并将输出写入另一个表。

订单数据库中有两万多条记录,这意味着数据流任务将被执行两万多次。CRM 数据库也将被查询超过两万次。做这些需要一个多小时。

我可以利用一些内置功能来加速这些(或以“智能”方式进行)吗?而且,在 ETL 和/或 SSIS 的上下文中,一个小时很长吗?

sql-server ssis
  • 2 个回答
  • 158 Views
Martin Hope
Ryan
Asked: 2017-06-20 07:06:50 +0800 CST

计算带有新项目的订单

  • 1

场景:找出每个工厂中的任何客户,这些客户有三个或更多订单,其中包含他们以前从未购买过的新商品。例如,约翰有:

Order A: Item 1, Item 2
Order B: Item 2, Item 3, Item 4
Order C: Item 3

订单 B 包含约翰以前从未购买过的商品,而订单 C 则没有。

换句话说:从每个客户的第二个订单开始,我们想知道他们有多少订单,其中至少有一件商品以前从未出现在他们的订单中。

表架构:请参阅SQL Fiddle。RelatedRecordID 将多个记录绑定到一个订单中。

我的方法:另请参阅上面的 SQL Fiddle。这种方法有缺陷且不稳健。在前面John的例子中,这个方法会给出2个增量,但是因为订单C放在B之后,所以实际上只有一个增量。如果订单 B 不包含项目 3,则其优先级不会影响结果。

有人能想出解决办法或新方法吗?

sql-server sql-server-2008-r2
  • 4 个回答
  • 122 Views
Martin Hope
Ryan
Asked: 2017-06-03 21:37:09 +0800 CST

使用 SSIS 跨服务器查询

  • 4

我需要对两台服务器上的数据库发出查询:

[CRM].[CRM].[dbo].[BasicInfo] (NationalID PK, CustomerCardNo)
[ERP].[ERP].[dbo].[Order] (OrderID PK, CustomerCardNo)

我想做的是这样的:

select * 
from   [ERP].[ERP].[dbo].[Order] as O 
where  O.CustomerCardNo in (select CustomerCardNo 
                            from   [CRM].[CRM].[dbo].[BasicInfo]);

我认为有三种方法可以实现这一目标:

  1. 链接服务器:我的经理可能不会授权,因为他们不熟悉链接服务器;
  2. 开放数据源:公司政策不允许开发者访问数据库密码;
  3. SSIS:似乎是唯一的选择,我公司广泛采用SSIS。

当我在谷歌上搜索时,我没有找到有关如何使用 SSIS 执行此操作的教程。最接近的问题是这个。请给我一些指导。

sql-server-2008-r2 ssis
  • 2 个回答
  • 2650 Views
Martin Hope
Ryan
Asked: 2017-02-05 07:20:28 +0800 CST

使用触发器处理重复值

  • 2

我有一个数据库,其中的表如下:

tblCustomer(UserID [Primary Key],Facebook,Twitter,PhoneNum);
tblSales(InvoiceID [Primary Key],CustomerID [Foreign Key],ProductID [Foreign Key]);

我正在导入一些纸质记录,它们按时间(时间)顺序排列,包括以下列:

(Customer's)FaceBook,Twitter,PhoneNum,ProductID;

出于某种原因,我们没有现有的客户 ID 系统,因此 UserID 将在导入时自动生成。在我的场景中,Facebook、Twitter 或电话号码中的任何一个都可以唯一地标识一个客户,因此我对它们中的每一个都有唯一的索引来强制执行唯一性约束。

我创建了一个视图来方便数据导入:

viewDataEntry(FaceBook,Twitter,PhoneNum,ProductID);

一个常见的情况是客户的 Facebook(或其他联系方式)出现在多个销售记录中。创建一个触发器来处理这种情况:

CREATE TRIGGER
ON dbo.viewDataEntry
INSTEAD OF INSERT
AS

BEGIN TRY
INSERT INTO dbo.tblCustomer(Facebook,Twitter,PhoneNum)
SELECT Facebook,Twitter,PhoneNum FROM inserted;
END TRY

BEGIN CATCH
IF ERROR_NUMBER() != 2601 --To ignore uniqueness violation exception
THROW;
END CATCH

DECLARE @UserID INT;
SET @UserID = (SELECT UserID FROM dbo.tblCustomer AS O,inserted AS I WHERE (O.PhoneNum = I.PhoneNum OR O.Facebook = I.Facebook OR O.Twitter = I.Twitter));

INSERT INTO dbo.tblSales(CustomerID,ProductID)
SELECT @UserID,ProductID FROM inserted;

GO

预期结果是:

  • 如果导入了重复的客户记录,删除重复的,只插入到销售表中;

  • 如果导入了新的客户记录,则为客户和销售表创建记录。

但是,每当输入重复值时,我都会遇到错误 3910 或 3616,这意味着该事务是不可提交的。我认为这是因为需要回滚到客户表中的插入,并且我知道我不能在保留剩余部分的同时回滚部分事务(不幸的是,这是预期的结果)。

我找到了 MERGE 语句,但它有太多的限制(比如 WHEN MATCHED 必须后跟 UPDATE 和 DELETE)。

请提供任何可行的解决方案。

sql-server t-sql
  • 1 个回答
  • 4283 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve