标签: ansi-sql

在滚动时间内计算唯一ID

我有一个简单的表格,下面有很多ID和日期。

ID      Date
10R46   2014-11-23  
10R46   2016-04-11  
100R9   2016-12-21
10R91   2013-05-03 
...     ...
Run Code Online (Sandbox Code Playgroud)

我想制定一个查询,该查询针对日期(例如十天)的滚动时间范围计算唯一ID。这意味着对于每个日期,它应该给我该日期与10天后之间的唯一ID数。结果应如下所示。

UniqueTenDays    Date
200              2014-11-23 
324              2014-11-24 
522              2014-11-25
532              2014-11-26 
...              ...
Run Code Online (Sandbox Code Playgroud)

如下所示,但是我意识到我需要应用WHERE子句并以某种方式计算每个Date的ID。

SELECT Date, COUNT(DISTINCT ID)
FROM T 
WHERE Date BETWEEN DATE_SUB(Date, INTERVAL 10 DAY) AND Date
GROUP BY Date
ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

提前致谢。

ansi-sql google-bigquery

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

使用具有相同参数的select或update时受影响的行数不同 - PostgreSQL

我有两个带有相同Join和Where子句的SQL语句,但是我有一个问题,就是select语句给了我不同数量的行(在我的情况下为42),因为update语句会改变(在我的情况下是80,这就是所有行的表).

这是第一个(我用它来检查将受影响的行数):

SELECT COUNT(*) 
  FROM classes AS c
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 32
Run Code Online (Sandbox Code Playgroud)

这里是第二个(这使得工作,它将更新表类的一个字段):

UPDATE classes SET Cl_Status = 3
  FROM classes AS c 
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 80 (!)
Run Code Online (Sandbox Code Playgroud)

第一个和第二个语句之间的区别只是第一行,其他一切都是相同的.

有没有人知道在两个语句中获取相同行数的更改是什么?

sql postgresql ansi-sql

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

MySQL用另一个值替换结果值

我有MySQL,查询是:

select name,re_type from myTable
Run Code Online (Sandbox Code Playgroud)

我想替换所有类型的值:

1 = student
2 = teacher 
Run Code Online (Sandbox Code Playgroud)

所以结果应该是:

name    re_type
---------------
Ron     Student
Mac     Teacher
Run Code Online (Sandbox Code Playgroud)

不喜欢:

name    re_type
---------------
Ron     1
Mac     2
Run Code Online (Sandbox Code Playgroud)

是否有可能进行这样的查询,以便在MySQL中获得所需的结果?

mysql sql ansi-sql case-when

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

ANSI等价的IS NULL

我试图找到ANSI方式来编写T-SQL"IS NULL".(更正,是'IN NULL')互联网上的一些帖子说你可以使用coalesce让它像'IS NULL'一样工作

我喜欢这样做的原因:便携式代码.并且查询必须返回行NULL.

到目前为止我创建了这个:

SELECT empid,
       firstname,
       lastname,
       country,
       coalesce(region,'unknown') AS regions ,
       city
FROM HR.Employees
Run Code Online (Sandbox Code Playgroud)

结果集如下所示:

empid   firstname           lastname       country  regions city
1           Sara            Davis           USA     WA      Seattle
2           Don             Funk            USA     WA      Tacoma
3           Judy            Lew             USA     WA      Kirkland 
4           Yael            Peled           USA     WA      Redmond
5           Sven            Buck            UK      unknown London
6           Paul            Suurs           UK      unknown London
7           Russell         King            UK      unknown London
8           Maria           Cameron         USA     WA      Seattle
9           Zoya            Dolgopyatova    UK      unknown …
Run Code Online (Sandbox Code Playgroud)

sql coalesce isnull ansi-sql

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

通过标准sql从1亿条记录中选择1000个不同的名称

我有一个tb_FirstName有一个字段的表FirstName.该表有1亿个非空记录,有很多重复,例如约翰出现200万次.独特的数量FirstName超过200万.

如何使用标准 sql 尽快选择1000个不同的名称?

我目前正在使用以下内容,但这是

  • TSQL
  • 也许效率不高.

    SELECT x.FirstName
    FROM (
        SELECT  FirstName,
                rnk = RANK() OVER (ORDER BY Firstname)
        FROM    WHData.dbo.tb_DimUserAccount A
        GROUP BY FirstName
        ) x
    WHERE rnk <=1000
    
    Run Code Online (Sandbox Code Playgroud)

sql sql-server standards ansi-sql

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

将条件放在ANSI语法SQL查询中的位置

这两个查询之间有什么区别?我一直拒绝跳过ANSI语法的潮流,因为我无法解开各种语法歧义.

是1)返回连接的产品,然后过滤掉那些重量> = 500的连接记录?并且2)过滤掉加入之前的那些?

2语法不好吗?我为什么要用它?

1:

SELECT SOMETHING
FROM FOO
INNER JOIN BAR
ON FOO.NAME = BAR.NAME
WHERE BAR.WEIGHT < 500
Run Code Online (Sandbox Code Playgroud)

2:

SELECT SOMETHING
FROM FOO
INNER JOIN BAR
ON FOO.NAME = BAR.NAME AND BAR.WEIGHT < 500
Run Code Online (Sandbox Code Playgroud)

sql oracle ansi-sql

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

Oracle专有连接 - 在多种条件下加入

我有以下两个版本的ANSI兼容SQL(列/表名称已更改以保护机密数据),其中一个版本通过遵循正确的逻辑而另一个不符合我的要求来满足我的要求.

1)ANSI Join 1-Works

SELECT b.COLUMN_A,
  COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
  (SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON  a.COLUMN_A = b.COLUMN_A
AND a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5)  --WORKS
GROUP BY b.COLUMN_A
Run Code Online (Sandbox Code Playgroud)

1)给出如下输出:

COLUMN_A  COUNT(COLUMN_A)
--------------------------
A       0
B       0
C       1
D       1
E       0
Run Code Online (Sandbox Code Playgroud)

2)ANSI Join 2 - 不起作用

SELECT b.COLUMN_A,
  COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
  (SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON  a.COLUMN_A = b.COLUMN_A
WHERE
a.COLUMN_B in (SELECT FROM …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle9i ansi-sql

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

'LEFT JOIN'与'LEFT OUTER JOIN'

我知道确实没有什么区别,但是'LEFT JOIN'是ANSI表格还是有任何RDBMS会失败'LEFT JOIN'并要求'LEFT OUTER JOIN'.[我在这里问,所以我可以保存几次点击,填写表格等,以获得正确的ANSI标准!]

sql left-join outer-join ansi-sql

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

'INDEX'是否有效的SQL ANSI ISO标准关键字/保留字?

我已经做过一些关于'INDEX'是否是ANSI SQL中的关键字的研究,但我没有运气,尤其是2008和2011标准.

任何人都知道这是否是一个有效的ANSI ISO SQL关键字?

sql ansi-sql

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

SQL:具有DATE类型列的聚合函数

我偶然发现了一个关于哪些聚合函数适用于DATE类型列的问题(在测试中).所以,据我所知,COUNT只计算行数,MIN和MAX返回最早/最晚的日期.但是,我对SUM和AVG功能有点困惑.他们只是将DATE值转换为整数并计算这些整数的总和/平均值吗?或者我错在这里?无论如何,这种行为在SQL的所有实现中是否一致?提前致谢.

sql date aggregate-functions ansi-sql

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