我在SQL Server 2005数据库中有一个包含以下字段的表:
id, integervalue, stringcreate_date, datetime新数据不断被插入到此表中(每天数万条记录),因此我使用以下查询来比较在不同日期插入的数据量.
SELECT CONVERT(varchar(10), create_date, 101) as 'Date', COUNT(*) as 'Record Count',
FROM the_table
GROUP BY CONVERT(varchar(10), create_date, 101)
ORDER BY 'Date' desc
Run Code Online (Sandbox Code Playgroud)
此查询返回如下所示的数据:
12/20/2012 | 48155
12/19/2012 | 87561
12/18/2012 | 71467
Run Code Online (Sandbox Code Playgroud)
但是,在今天运行此查询时,我注意到排序无法按预期工作,数据库中有多年的数据.而不是今年的数据位于结果集的最顶端,它最终位于底部(为清晰起见省略了记录)
06/29/2012 | 9987
01/04/2013 | 15768
01/03/2013 | 77586
01/02/2013 | 23566
Run Code Online (Sandbox Code Playgroud)
我理解为什么会发生这种情况,因为我的格式化日期只是一个字符串,并且不能指望sql server将它排序为除字符串之外的任何东西.但我希望订购准确.我怎样才能做到这一点?(最近一天总是出现在第一天)
几天来,我一直在寻找如何执行此操作的方法-不幸的是,我对SQL查询没有太多的经验,因此这是反复试验的结果。
基本上,我创建了两个表-都具有一个DateTime列,而另一个具有值所在的列。每个表中的DateTime列具有不同的值。
所以...
ACOQ1 (Table 1)
===============
| DateTime | ACOQ1_Pump_Running |
|----------+--------------------|
| 7:14:12 | 1 |
| 8:09:03 | 1 |Run Code Online (Sandbox Code Playgroud)
ACOQ2 (Table 2)
===============
| DateTime | ACOQ2_Pump_Running |
|----------+--------------------|
| 3:54:20 | 1 |
| 7:32:57 | 1 |Run Code Online (Sandbox Code Playgroud)
我想合并这两个表,如下所示:
| DateTime | ACOQ1_Pump_Running | ACOQ2_Pump_Running |
|----------+--------------------+--------------------|
| 3:54:20 | 0 OR NULL | 1 |
| 7:14:12 | 1 | 0 OR NULL |
| 7:32:57 | 0 OR NULL | 1 |
| …Run Code Online (Sandbox Code Playgroud)假设我有一个GAME包含以下字段的表
user_id, result
Run Code Online (Sandbox Code Playgroud)
我希望计算胜利百分比,定义为记录总数
result = 'Win'
Run Code Online (Sandbox Code Playgroud)
与记录总数相比
result <> ''
Run Code Online (Sandbox Code Playgroud)
我如何在SQL中执行此操作并以最高赢率百分比的顺序返回结果?
在我的表中,我有一个存储日期的列.我传递月号作为存储过程的参数.
我想从表中删除该月的所有条目.
可能吗....??
我有这样的表.
NoteID CustomerID CustomerName Note Type Date Active
6 81 Paris test Info 2015-06-04 1
10 81 Rotterdam Everything is allright Comment 2015-06-04 1
11 81 Hamburg Everything is allright Info 2015-06-04 1
12 81 Hamburg Everything is allright Info 2015-06-04 1
13 81 Amsterdam Everything is allright Info 2015-06-04 1
14 81 Rotterdam Everything is allLeft Comment 2015-06-04 1
15 81 Hamburg Everything is allLeft Info 2015-06-04 1
16 81 Hamburg Everything is allLeft Info 2015-06-04 1
17 81 …Run Code Online (Sandbox Code Playgroud) 触发此查询后,我收到错误.
select COUNT(*)
from [DB1].dbo.Transaction(nolock) t
join [DB2].dbo.visits (nolock) v
on t.V_ID=v.V_ID
where t.Ct_ID=11
and t.Timestamp>'06-08-2015'
and v.C_ID is null
Run Code Online (Sandbox Code Playgroud)
错误:
消息8115,级别16,状态2,行2算术溢出错误将表达式转换为数据类型int
SQL问题
我目前正在尝试根据另一列的共享值获取某一列的某个子集的平均值。以下是一些示例数据:
Score Player
5 1
9 1
7 1
8 2
3 2
6 2
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能分别得到玩家 1 和玩家 2 的平均得分呢?我的第一个想法是尝试这样的事情:
SELECT AVG(score) FROM table WHERE DISTINCT player
Run Code Online (Sandbox Code Playgroud)
但是,当然,distinct这只适用于select查询的部分。我使用子查询的任何尝试都会导致错误:
子查询返回多行。
任何人可以提供的任何帮助将不胜感激。
状态表有几种状态.我想要这样的查询.
select * from command where status <> 's' and status<> 'sc'
Run Code Online (Sandbox Code Playgroud)
但查询使用"状态"S检索数据.问题是什么?
如果我有这样的表格:
Id StateId Name
1 1 a
2 2 b
3 1 c
4 1 d
5 3 e
6 2 f
Run Code Online (Sandbox Code Playgroud)
我想选择如下:
Id StateId Name
4 1 d
5 3 e
6 2 f
Run Code Online (Sandbox Code Playgroud)
例如,Ids 1,3,4具有stateid 1.因此选择具有最大Id的行,即4.
我正在尝试创建一个正常的SQL查询,动态调用某个表中的列.我已经阅读了一些有关如何使用列的列表的论坛INFORMATION_SCHEMA.COLUMNS,但我想从中选择列INFORMATION_SCHEMA.COLUMNS from my table.
例如:
SELECT (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_') FROM OPOR
Run Code Online (Sandbox Code Playgroud)
但它只返回列名.不是我表中此列的值.所以我的问题是,是否可以返回值INFORMATION_SCHEMA.COLUMNS并从我的表中选择它?我的示例专栏是,U_NewColumn.所以结果应该是:SELECT U_NewColumn FROM OPOR
我有Car车ID的表(smallint)和另一张表与每辆车相关的事件.
现在我想获得按特定标准选择的汽车的最新活动,但这似乎不起作用.
当我有这样的查询来获取每辆车的最新事件时,它可以正常工作:
SELECT * FROM [dvm_data].[dbo].[Car] CD
CROSS APPLY (
SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)
在另一方面,当我尝试使用限制汽车WHERE在第一SELECT,它不再起作用:
SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100 CD
CROSS APPLY (
SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到错误消息:
消息102,级别15,状态1,行1'CD'附近的语法不正确.消息102,级别15,状态1,行3'MD'附近的语法不正确.
第一个查询本身工作正常:
SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?通常使用的例子CROSS APPLY没有WHERE在第一SELECT查询,这是否意味着什么?
另一件事,如果我想DISTINCT在第一次查询中使用,找到具有某种类型事件的汽车,然后找到这些汽车的最新事件.它会是这样的,但这也行不通:
SELECT DISTINCT ID FROM …Run Code Online (Sandbox Code Playgroud) 我正在使用Sql Server 2012.考虑表模式,
create table A (col1 int, col2 int)
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行此查询,
select col1, col2, col3, col4 from A
我得到执行错误的col3和col4不表.
但是有没有办法,这两列可以在结果中显示NULL为每行的值,即使它在表中不可用?