小编Mic*_*mon的帖子

为空时 Postgresql 返回 0

我正在尝试使用运行查询,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)

postgresql postgresql-9.3

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

逐年比较数据

我想在 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)

sql-server t-sql sql-server-2008-r2

5
推荐指数
1
解决办法
4616
查看次数

查询表中列出的所有数据库

我一直在使用游标来获取结果,但是返回结果集需要很长时间。我希望找到一种方法来快速返回结果(如果可能的话)。这是我的带有垃圾 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)

sql-server t-sql sql-server-2008-r2

4
推荐指数
1
解决办法
172
查看次数

查询日期范围

我有一个存储过程,我想第一次在@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)

sql-server t-sql sql-server-2008-r2 date

2
推荐指数
1
解决办法
443
查看次数