我有一个简单的表格,下面有很多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)
提前致谢。
我有两个带有相同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)
第一个和第二个语句之间的区别只是第一行,其他一切都是相同的.
有没有人知道在两个语句中获取相同行数的更改是什么?
我有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中获得所需的结果?
我试图找到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) 我有一个tb_FirstName有一个字段的表FirstName.该表有1亿个非空记录,有很多重复,例如约翰出现200万次.独特的数量FirstName超过200万.
如何使用标准 sql 尽快选择1000个不同的名称?
我目前正在使用以下内容,但这是
也许效率不高.
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)这两个查询之间有什么区别?我一直拒绝跳过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) 我有以下两个版本的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) 我知道确实没有什么区别,但是'LEFT JOIN'是ANSI表格还是有任何RDBMS会失败'LEFT JOIN'并要求'LEFT OUTER JOIN'.[我在这里问,所以我可以保存几次点击,填写表格等,以获得正确的ANSI标准!]
我已经做过一些关于'INDEX'是否是ANSI SQL中的关键字的研究,但我没有运气,尤其是2008和2011标准.
任何人都知道这是否是一个有效的ANSI ISO SQL关键字?
我偶然发现了一个关于哪些聚合函数适用于DATE类型列的问题(在测试中).所以,据我所知,COUNT只计算行数,MIN和MAX返回最早/最晚的日期.但是,我对SUM和AVG功能有点困惑.他们只是将DATE值转换为整数并计算这些整数的总和/平均值吗?或者我错在这里?无论如何,这种行为在SQL的所有实现中是否一致?提前致谢.
ansi-sql ×10
sql ×9
oracle ×2
case-when ×1
coalesce ×1
date ×1
isnull ×1
left-join ×1
mysql ×1
oracle9i ×1
outer-join ×1
postgresql ×1
sql-server ×1
standards ×1