我正在基于 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 之一的表“注释”不能在字段列表中使用
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) 我有一张宽桌子,看起来像这样:
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) 这是一个简单的问题,但我找不到答案。
我想使用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 个表重复此操作。
我在我的 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) 我正在尝试解决一个特别困难的问题。我正在 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 …
我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS
我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_AS在WHERE子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?
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) 如果数据像这样每 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) 这对我来说是一个相当令人困惑的问题。我有一个充满棒球统计数据的数据库。运行此查询:
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) 下面是我的 .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) query ×10
mysql ×5
postgresql ×2
sql-server ×2
aggregate ×1
alias ×1
collation ×1
join ×1
mysql-5.1 ×1
mysql-8.0 ×1
optimization ×1
order-by ×1
pagination ×1
performance ×1
rdbms ×1
select ×1
t-sql ×1
timescaledb ×1
varbinary ×1