背景:
我对夏令时更改有疑问。输入到数据库中的任何记录(旁注:我无法访问输入此数据的脚本/代码以修复它)2021-03-28和2021-10-31以不正确的日期输入到数据库中。例如:
输入的记录2021-03-26最终在数据库中作为2021-03-26 00:00:00,这是正确的。
输入的记录2021-03-29最终会出现在数据库中,因为2021-03-28 23:00:00这是不正确的。
因此,当我尝试搜索在 on 中输入的记录时2021-03-26,查询工作正常,但是如果我尝试搜索在 on 中输入的2021-03-29记录,由于时间更改,它会返回错误日期的记录。
样本数据:
ColDate, ColName
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
Run Code Online (Sandbox Code Playgroud)
工作示例:
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @StartDate = '2021-03-26 00:00:00'
SET @EndDate …Run Code Online (Sandbox Code Playgroud) 我们正在为名为 readoutprobes 和 readoutprobekits 的项目创建一个库存系统。下面的模式使用items和itemkits两个词进行了简化。
一个物品包,是一个或多个物品的预定义集合,即一个套件。在套件中,特定类型的物品只能出现一次。一个套件,通常包含约 40 件物品。套件中物品的定义由itemkit_item表捕获。套件的库存记录在itemkit_containers表中。
itemkit_container不跟踪物理项目容器。相反,它假设使用一组物理项目正确地“组装”了一个物理项目包,但我们不知道是哪些。填充时,itemkit_containers 记录中的“填充”字段设置为 true。
物品的库存由item_containers表跟踪。它的存在由容器体积监控。当体积为 0 时,容器被认为是空的。
从item_container表中获取特定物品的体积> 0的物理物品容器的数量,对于套件也是如此
我们希望获得每个项目的“保留计数”编号,以反映套件库存。
例如,假设我们有一个名为 A 的项目,其计数为 42。如果我们正在创建一个包含名为 A 的项目和相应的 itemkit_container 的 itemkit,我们希望“reserved”的计数为 1,对于 item一种。
项目的“主查询”如下所示:
SELECT items.*,
ic.item_count
FROM items
LEFT JOIN (
SELECT p.id, COUNT(*) item_count, ic.item_id
FROM items AS p, item_containers AS ic
WHERE p.id = ic.item_id AND ic.volume > 0
GROUP BY p.id
) AS ic
ON ic.item_id …Run Code Online (Sandbox Code Playgroud) 我想将日期格式转换为YYYY-MM-DDThh:mm:ss.SSSXXXZ(ISO 8601)。
得到了2021-02-10T04:02:55.55SXXXZ,这是错误的。我需要它作为2021-02-10T04:02:55.55S000000Z.
select to_char(now(), 'YYYY-MM-DDThh:mm:ss.SSSXXXZ')
Run Code Online (Sandbox Code Playgroud) 首先,我无法提供 SQL Fiddle,因为要重新创建数据真的很复杂。我将尝试尽可能清楚地呈现查询、输出和问题。
我有一个看起来像这样的查询:
with cte(MainArt,secondaryArt, Quantity) as(
SELECT t_mitm, t_sitm, t_qana
FROM ttibom010201
WHERE TRIM(t_mitm) = 'ACL-4812070395-4'
union all
select
ttibom010201.t_mitm, ttibom010201.t_sitm, ttibom010201.t_qana
from ttibom010201 inner join cte on cte.secondaryArt=ttibom010201.t_mitm
)
select cte.* ,dsc.t_cuni, dsc.t_dsca from cte
left join ttcibd001201 dsc on dsc.t_item = cte.secondaryArt
where TRIM(secondaryArt) like N'30%'
Run Code Online (Sandbox Code Playgroud)
这个确切的查询返回了这 4 行:
从另一个表中,我使用这个secondArt值来获取一些信息:
select top 1 t_orno, t_item,t_pric from ttdpur401201 where t_item like '%30102024%' order by t_ddte desc
Run Code Online (Sandbox Code Playgroud)
结果是:
正如您所看到的 t_item 和 secondaryArt 是相同的(第一个查询的第 3 行和第 4 …
我有一个以下格式的记录列表(示例),是通过连接数据库中的多个表和条件条件生成的:
| 第 1 列 | 第2栏 | 第3栏 |
|---|---|---|
| 100 | 200 | 1 |
| 100 | 201 | 1 |
| 100 | 第202章 | 1 |
| 100 | 203 | 1 |
| 101 | 204 | 1 |
| 101 | 205 | 1 |
| 102 | 206 | 1 |
| 102 | 207 | 1 |
我想要的是根据 Col1 和 Col2 中的值更新上例中 Col3 中的值。
这个想法是首先循环 Col1,然后再循环 Col2,并从 1 开始更新 Col3 中的值,每次迭代 Col2 记录时增加 1。对于 Col1 的下一次迭代,应再次重复此操作。
上述方法的预期输出示例为:
| 第 1 列 | 第2栏 | 第3栏 |
|---|---|---|
| 100 | 200 | 1 |
| 100 | 201 | 2 |
| 100 | 第202章 | 3 |
| 100 | 203 | 4 |
| 101 | 204 | 1 |
| 101 | 205 | 2 |
| 102 | 206 | 1 |
| 102 | 207 … |
sql postgresql stored-procedures row-number greatest-n-per-group
我正在使用 Postgres 作为聊天应用程序。我有两张表,一张包含对话 ID 和参与者,另一张表包含消息。
我正在运行以下查询来获取用户的所有对话,并使用横向联接在结果中包含最后一条消息:
select c.id, c.title, c.members, max(m.created_at) delivered_at, last_message
from conversations c
join messages m on c.id = m.conversation_id
left join lateral (select message from messages m where c.id = m.conversation_id order by created_at desc limit 1) last_message on true
where array[4] <@ c.members
group by c.id, last_message
order by delivered_at desc
Run Code Online (Sandbox Code Playgroud)
这有效,但消息返回为(message)而不是message
我真的不知道为什么。有什么我可以做的,这样我就不必替换括号作为额外的步骤?
您好,是否可以将行值转换为列。我正在使用 ORACLE SQL,我想将月份转换为具有 kpi 值的列,如下所示。我尝试了分区和合并语句,但似乎没有任何效果。我真的很感激一些帮助。先感谢您。
输入数据:
| 部门 | 年 | 月 | 关键绩效指标 | 价值 |
|---|---|---|---|---|
| A | 2000年 | 1 | 销售量 | 5000 |
| A | 2000年 | 1 | 每个客户的收入 | 120 |
| A | 2000年 | 2 | 销售量 | 6000 |
| A | 2000年 | 2 | 每个客户的收入 | 140 |
期望的输出:
| 部门 | 年 | 关键绩效指标 | 1 | 2 |
|---|---|---|---|---|
| A | 2000年 | 销售量 | 5000 | 6000 |
| A | 2000年 | 每个客户的收入 | 120 | 140 |
我在下面做了三个选择,每个选择都返回一个值。如何仅选择并返回三个值,每个值都有其条件?所有信息都在一张表中。
SELECT COUNT (GRA_HRFIM) as "Conferidos antes 17h" FROM GRADE WHERE GRA_HRFIM < '17:00:00' AND GRA_DATADIGITA = '04/28/2021'
SELECT COUNT (GRA_HORADIGITA) as "Importados antes 17h" FROM GRADE WHERE GRA_HORADIGITA < '17:00:00' AND GRA_DATADIGITA = '04/28/2021'
SELECT COUNT (GRA_HRFIM) as "Total pedidos" FROM GRADE WHERE GRA_DATADIGITA = '04/28/2021'
Run Code Online (Sandbox Code Playgroud) 好吧,这个让我难住了。我希望这不是愚蠢/显而易见的事情......
我正在尝试修复客户端数据库中的地址。我有一个函数,它接受一个字符串并返回一个字符串,其中每个单词的第一个字母都大写。
我试图只传递全部大写或全部小写的地址,但它返回的是整个数据集。前 3 列都是正确的,所以我不明白为什么 WHERE 不起作用。
这是我的代码。
SELECT
[ConvertFirstLettertoCapital]([Address]) AS [Standard],
UPPER([Address]) AS [Upper],
LOWER([Address]) AS [Lower],
[Name],
[Address],
[Address 2],
[City],
[State]
FROM [Address_List]
WHERE
[Address] = UPPER([Address]) OR
[Address] = LOWER([Address])
Run Code Online (Sandbox Code Playgroud)
我有下表:
| 团队 | 电话号码 | 订单号 | 通话日期 | 订购日期 |
|---|---|---|---|---|
| TM1 | 2222222222 | 26699443 | 2021-01-28 | 2021-02-05 |
| TM1 | 1111111111 | 26699450 | 2021-01-22 | 2021-01-22 |
| TM2 | 5555555555 | 26699466 | 2021-02-22 | 2021-02-23 |
| TM2 | 5555555555 | 26699467 | 2021-01-22 | 2021-02-01 |
| TM3 | 7777777777 | 26699488 | 2020-12-10 | 2021-01-03 |
我想计算每个团队每个月从电话到订单的平均时间。这是我的查询:
SELECT
Team,
MONTH(CallDate),
AVG(DATEDIFF(day,CallDate,OrderDate))
FROM MyTab AS C
GROUP BY Team, MONTH(CallDate)
Run Code Online (Sandbox Code Playgroud)
我想计算 CallDate 和 OrderDate 之间的差异,然后为每个团队应用每个月的平均值。
sql ×10
sql-server ×4
postgresql ×3
t-sql ×2
average ×1
dbexpress ×1
dst ×1
firebird ×1
inventory ×1
iso8601 ×1
lateral-join ×1
mysql ×1
oracle ×1
oracle11g ×1
pivot ×1
procedure ×1
row-number ×1
select ×1
sqlfiddle ×1
to-char ×1
union ×1
where-clause ×1