标签: query

来自 SELECT 之一的表不能在字段列表中使用

我正在基于 MySQL 的数据库中尝试以下查询:

SELECT 
    alert.name, alert.new_state_date, alert.prev_state_date
FROM
    grafana.alert
WHERE
    alert.id = 1 
UNION SELECT 
    annotation.epoch
FROM
    grafana.annotation
ORDER BY annotation.id DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我的目的是让数据显示在同一个面板中,这样我就可以停止来回切换。但是,我收到以下错误:

错误代码:1250。来自 SELECT 之一的表“注释”不能在字段列表中使用

mysql query

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

是否有“软” ORDER BY / GROUP BY?

SQL-小提琴

http://sqlfiddle.com/#!9/c82c87b/1

表定义

首先,这是我的表:

 CREATE TABLE `stackoverflow` (
`id` VARBINARY( 36 ) NOT NULL COMMENT 'GUID generated by PHP',
`time` TIME NOT NULL COMMENT 'Current time(stamp)',
`type` VARCHAR( 10 ) NOT NULL COMMENT 'start/stop',
`reference` VARBINARY( 36 ) NOT NULL COMMENT 'multiple starts/stops to one reference',
PRIMARY KEY ( `id` )
) ENGINE = MYISAM 
Run Code Online (Sandbox Code Playgroud)

数据

这是一些示例数据:

INSERT INTO `stackoverflow` (
`id` ,
`time` ,
`type` ,
`reference`
)
VALUES 
('03bd8e91-b9aa-4d18-be47-9e9cce903cfd', '11:00:00', 'start', '76afe924-08aa-431b-904a-66290c50da6a'), 
('ef10860a-7666-4ca0-95b6-79ef2d5b3f75', '11:01:00', 'start', 'fd064ef5-462f-489c-ae14-3cb766eb80c4'), 
('9bc72e24-a0d4-43a3-86ab-973c331e2958', '11:02:00', …
Run Code Online (Sandbox Code Playgroud)

mysql query order-by mysql-5.1

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

从查找值生成宽表

我有一张宽桌子,看起来像这样:

Table Windspeed
Timestamp           A-004   A-005a  A-006a ... (column 161) E-009
09-Apr-19 00:00:00  13.09   13.95   10.16                   11.71
09-Apr-19 00:05:00  12.17   11.98   12.54                   10.66
Run Code Online (Sandbox Code Playgroud)

我需要以相同的格式生成一个新表,但替换查找表中的列值,如下所示:

Table Powercurve
WindSpeedBin    Power_WdSpd Turb_Num
...
9.5             1216.9      1
10              1362.9      1
10.5            1476.3      1
11              1597        1
11.5            1701.5      1
12              1798.3      1
12.5            1828.5      1
13              1840        1
13.5            1846.1      1
...
9.5             1211.9      2
10              1342.9      2
10.5            1436.3      2
11              1517        2
11.5            1691.5      2
12              1713.3      2
12.5            1801.5      2
13 …
Run Code Online (Sandbox Code Playgroud)

sql-server query

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

如何在MySQL中选择所有列加上一个别名列

这是一个简单的问题,但我找不到答案。

我想使用SELECT *语句选择表中的所有列,但我还需要通过这种方式为 UUID 列添加别名:BIN_TO_UUID(ID) as ID

我需要这样的东西:

SELECT BIN_TO_UUID(ID) AS ID, * FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

另外,最好删除别名的原始列,以免同一列两次具有不同的名称,但前提是这不会向查询添加更多文本,因为我将不得不对所有 16 个表重复此操作。

mysql query select alias mysql-8.0

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

使用(时间戳、uuid)字段时键集分页不一致

我在我的 Postgres 数据库上使用 uuids 的键集分页方法,如本文所述:

但是,我注意到当我有两条日期相同的记录时,会从结果中跳过行。

例如,当我运行查询时:

SELECT id, created_at FROM collection
ORDER BY created_at DESC, id DESC
Run Code Online (Sandbox Code Playgroud)

我按照我的预期取回了记录,作为created_at主要顺序,然后id充当决胜局:

ID 创建时间
e327847a-7058-49cf-bd91-f562412aedd9 2022-05-23 23:07:22.592
d35c6bb8-06dd-4b86-b5c6-d123340520e2 2022-05-23 23:07:22.592
5167cf95-953f-4f7b-9881-03ef07adcf3c 2022-05-23 23:07:22.592
d14f48dc-df22-4e98-871a-a14a91e8e3c1 2022-05-23 23:07:21.592

但是,当我运行查询来分页时,例如:

SELECT id, created_at
FROM collection
WHERE (created_at, id) < ('2022-05-23 23:07:22.592','d35c6bb8-06dd-4b86-b5c6-d123340520e2')
ORDER BY created_at DESC, id DESC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)

我希望取回最后两条记录,但我的结果集是

ID 创建时间
d14f48dc-df22-4e98-871a-a14a91e8e3c1 2022-05-23 23:07:21.592

我还尝试了查询的一些变体来尝试修复它,例如:

SELECT id, created_at
FROM collection
WHERE created_at < '2022-05-23 23:07:22.592' OR
     (created_at …
Run Code Online (Sandbox Code Playgroud)

postgresql query pagination

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

根据PostgreSQL/TimescaleDB中的关系数据选择遥测数据

我正在尝试解决一个特别困难的问题。我正在 SQL 表 (PostgreSQL) 中存储来自某些传感器的一些遥测数据,我想知道如何编写一个查询,该查询将使用来自其他两个表的关系信息对遥测数据进行分组。

我有一张表存储来自传感器的遥测数据。该表包含三个字段,一为时间戳,一为传感器ID,一为传感器当时的值。值列是一个递增计数(它只会增加,不会重置)

Sensor_Telemetry

时间戳 传感器 ID 价值
2022-01-01 00:00:00 5 3
2022-01-01 00:00:01 5 5
2022-01-01 00:00:02 5 6
... ... ...
2022-01-01 01:00:00 5 第675章

我有另一个表,用于存储传感器的状态(无论是静止还是运动)以及该传感器的特定状态的开始/结束日期:

状态

开始日期 结束日期 地位 传感器 ID
2022-01-01 00:00:00 2022-01-01 00:20:00 运动中 5
2022-01-01 00:20:00 2022-01-01 00:40:00 固定式 5
2022-01-01 00:40:00 2022-01-01 01:00:00 运动中 5
... ... ... ...

传感器位于特定位置。Sensor 表存储以下元数据:

传感器

传感器 ID 位置ID
5 16

在决赛表中,我有每个位置发生的变化。班次表是所有班次发生的列表,即在本例中,班次 A 定义为每天 00:00:00 到 00:30:00 之间发生,班次 B 定义为每天 00:30 …

postgresql join query aggregate timescaledb

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

SQL Server 中选择查询的区分大小写排序规则

我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS

我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_ASWHERE子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?

Create Table #tmpTest 
(
id int primary key identity(1,1),
name varchar(100)
)

Insert Into  #tmpTest  values ('TestQuery'),('TESTQUERY'),('TEstquerY')

Select * from #tmpTest
 Where name = 'TestQuery'

Select * from #tmpTest
 Where name = 'TestQuery'
 Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

sql-server query collation t-sql sql-server-2012

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

Varbinary 更新尝试

如果数据像这样每 3 个字节分割,是否可以将其适应更新查询,该更新查询必须寻找 3 个字节或 (0x000000) 的空闲序列,并用新序列替换它?问题是强制转换/替换无法处理未定义的数据(即 0x00)。varbinary 数据每 3 个字节划分 -> data(3bytes 长)data(3bytes 长)。

DECLARE @YourTable table
(
Id INT PRIMARY KEY,
Val VARBINARY(50)
)

INSERT @YourTable
VALUES (1, 0x0329000414000B14000C14000D0F00177800224600467800473C00550F00000000000000000000000000),
       (2, 0x0329002637000B14000C14000D0F00177800224600467800473C00550F00000000000000000000000000);


SELECT Id, Triplet
FROM @YourTable T
JOIN (VALUES (1),(4),(7),(10),(13),(16),(19),(22),(25),(28),(31),(34),(37),(40),(43),(46),(49)) Nums(Num) ON Num <= DATALENGTH(T.Val)
CROSS APPLY (VALUES (SUBSTRING(T.Val, Num, 3))) V(Triplet)
WHERE Triplet = 0x000000 and DATALENGTH(Triplet) = 3
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

UPDATE x    
set  x.column =  CAST(REPLACE(x.column, 0x000000, 0xFFFFFF) AS VARBINARY)
from Table as x 
Run Code Online (Sandbox Code Playgroud)

仅当列不包含数据时才有效。

UPDATE x …
Run Code Online (Sandbox Code Playgroud)

query sql-server-2012 varbinary

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

尽管没有索引/键,但更改一个 WHERE 字段时,MySQL 查询速度非常慢

这对我来说是一个相当令人困惑的问题。我有一个充满棒球统计数据的数据库。运行此查询:

SELECT * FROM hits
JOIN stadiums ON stadiums.gameName = hits.gameName
JOIN players ON (players.gameName = hits.gameName AND players.id = hits.batter)
JOIN games ON games.gameName = hits.gameName
WHERE games.type = 'R'
LIMIT 50
Run Code Online (Sandbox Code Playgroud)

返回:

/* 0 rows affected, 50 rows found. Duration for 1 query: 0.218 sec. */
Run Code Online (Sandbox Code Playgroud)

但是运行这个查询:

SELECT * FROM hits
JOIN stadiums ON stadiums.gameName = hits.gameName
JOIN players ON (players.gameName = hits.gameName AND players.id = hits.batter)
JOIN games ON games.gameName = hits.gameName
WHERE games.leagueLevel = 'mlb'
LIMIT …
Run Code Online (Sandbox Code Playgroud)

mysql rdbms query

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

改进慢查询。附上慢查询日志

下面是我的 .NET 应用程序运行时的慢查询日志。请让我知道如何提高查询的性能:

TCP Port: 3306, Named Pipe: (null)
Time                 Id Command    Argument
# Time: 110805 13:25:39
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.015625  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1373
use stockist;
SET timestamp=1312530939;
SELECT SUM(GROSSAMOUNT) FROM BILLDETAILS WHERE MONTH(BILLDATE) = 8 AND YEAR(BILLDATE) = 2011;
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.000000  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1373
SET timestamp=1312530939;
SELECT COUNT(BILLNO) FROM BILLDETAILS WHERE MONTH(BILLDATE) = 8 AND YEAR(BILLDATE) = 2011;
# Time: 110805 …
Run Code Online (Sandbox Code Playgroud)

mysql performance query optimization query-performance

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