我正在尝试使用运行查询,MAX()
但我的问题是,如果该字段包含一个NULL
值,则数据不返回任何内容。更新表不是一个选项,那么这个查询应该如何重写以返回 0 时NULL
?
下面的示例 DDL - 我硬编码了一个WHERE
不返回任何内容的子句,仅用于说明目的,理想情况下我想为用户返回所有usernames
和最高logincount
的
CREATE TABLE Test
(
username varchar(50) not null,
logincount int,
logindate Date
);
Insert Into Test (username, logincount, logindate)
VALUES
('er11', 1, '2017-01-01'), ('er11', 2, '2017-01-02'), ('ff12', NULL, NULL)
,('jb88', 1, '2017-01-09');
With maxlogincount As
(
select max(logincount) As "MaxLoginCount"
,username
FROM Test
GROUP BY username
)
Select
username
,logincount
,logindate
FROM Test t
inner join maxlogincount mlc
ON t.username = …
Run Code Online (Sandbox Code Playgroud) 我想在 2017 年提取一个日期范围的数据,然后提取相同的日期范围,但在 2016 年。我以为我会变得狡猾并使用DateAdd()
功能,但我在这里错过了一些东西,因为我收到错误
消息 241,级别 16,状态 1,第 14 行
从字符串转换日期和/或时间时转换失败。
我想要做的是COUNT(saledate)
在时间段之间获得一个秋天,这将给我销售数量。这是示例 DDL
Declare @startdate varchar(100), @enddate varchar(100), @prevyrstartdate varchar(100), @prevyrenddate varchar(100)
SET @startdate = '01/01/2017'
SET @enddate = '01/31/2017'
SET @prevyrstartdate = CAST(DateAdd(yy, -1, @startdate) As Date)
Set @prevyrenddate = CAST(DateAdd(yy, -1, @enddate) As Date)
Declare @HoldingPattern Table
(
salesman varchar(100)
,saledate date
)
Insert Into @HoldingPattern (salesman, saledate) VALUES
('BOB', '2017-01-23')
,('BOB', '2017-01-30')
,('BOB', '2017-01-24')
,('BOB', '2017-01-30')
,('BOB', '2017-01-30')
,('BOB', '2017-01-30')
,('BOB', '2017-02-30') …
Run Code Online (Sandbox Code Playgroud) 我一直在使用游标来获取结果,但是返回结果集需要很长时间。我希望找到一种方法来快速返回结果(如果可能的话)。这是我的带有垃圾 DDL 的数据结构。
第一个问题是每个员工都有自己的桌子。我知道这是一个主要的设计缺陷,我们正在迅速解决这个问题,但在所有元素都更新之前我需要一个替代方案。所有 3 个表geoffrey, jorge, mitch
都具有相同的结构,我附上了示例 DDL geoffrey, & jorge
,下面是一个示例查询,显示了我需要从两个表中的每一个查询的内容。
非常感谢有关如何实现这一结果的任何帮助!
Create Table #ReviewDB
(
[TableName] varchar(500)
,[ServerDBTable] varchar(MAX)
)
Insert Into #ReviewDB VALUES
('geoffrey', 'beans.franks.dbo.geoffrey')
,('jorge', 'smallpox.virus.dbo.jorge')
,('mitch', 'mosquito.insect.dbo.mitch')
Create Table #geoffrey
(
recordID int IDENTITY(1,1) PRIMARY KEY
,firstname varchar(500)
,lastname varchar(500)
,address varchar(500)
,city varchar(500)
,state varchar(500)
,zip varchar(500)
,phone varchar(500)
,itemsold varchar(500)
,saledate datetime
,managerapproved varchar(500)
)
Insert Into #geoffrey VALUES
('manny', 'ramirez', '1111111 aoaswdfrljkasdf ', 'topaz', 'mn', '1111', '9995552222', …
Run Code Online (Sandbox Code Playgroud) 我有一个存储过程,我想第一次在@startdate
&之间收集数据,@enddate
然后我想将该数据与前一年进行比较。
我尝试了以下语法(显然是为了测试)以确保在添加到我的生产语法之前我得到了我想要的日期输出。但是,这给了我一个错误
消息 102,级别 15,状态 1,第 11 行
“-”附近的语法不正确。
消息 102,级别 15,状态 1,第 14 行
“-”附近的语法不正确。
这是我尝试的语法。为了输出所需的日期,我会改变什么?
Declare @startdate date = '20170101'
,@enddate date = '20170212'
--one year prior to @startdate
Select CAST(DateAdd(yy, -1, @startdate) As Date)
--One year prior to @enddate
SELECT CAST(DateAdd(yy, -1, @enddate) As Date)
--This will get first day of prev yr
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0,
DATEADD(YEAR, –1, @startdate)), 0)
--This will get last day of prev yr
SELECT DATEADD(MILLISECOND, –3, DATEADD(YEAR, …
Run Code Online (Sandbox Code Playgroud)