我的问题似乎应该有一个比我想出的更简单的解决方案。从这个数据集开始:
日志表
+--------+-----------+------------------+---------+
| log_id | entity_id | date | comment |
+--------+-----------+------------------+---------+
| 1 | A | 2012-10-23 07:50 | foo |
| 2 | B | 2012-10-23 07:59 | bar |
| 3 | B | 2012-10-23 08:11 | baz |
| 4 | A | 2012-10-23 08:23 | bat |
+--------+-----------+------------------+---------+
Run Code Online (Sandbox Code Playgroud)
假设我想获取每个实体的日志条目的最新日期,以便结果如下所示:
Results:
+-----------+------------------+--------------+
| entity_id | last_log_date | last_comment |
+-----------+------------------+--------------+
| B | 2012-10-23 08:11 | baz |
| A | 2012-10-23 08:23 …Run Code Online (Sandbox Code Playgroud) 我想要一个表中至少有一个非NULL数据条目的那些列的列表。
换句话说,我想获取以下返回至少一个条目的列名称:
SELECT DISTINCT column_name FROM table WHERE column_name IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
SELECT column_name
FROM information_schema.columns
WHERE table_name = "table_name"
AND EXISTS (
SELECT DISTINCT column_name FROM table_name WHERE column_name IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
但这也会返回所有条目所在的列名NULL。
那么如何只获取那些没有NULL条目的列呢?
我将 PostgreSQL 9.1 与 Ruby on Rails 应用程序一起使用。
我正在尝试列出属于同一项目 ID (proj_sous_projet_id = 2) 的每个“费用”(在我的历史表中:hist_version_charges)的最后一个版本。
这使我使用 max() 聚合函数并将结果应用于同一个表上的 JOIN 函数,因为如果 SELECT 子句中的列未出现在 GROUP BY 子句中,则 PostgreSQL 没有授权使用它们,但使用最大值() 显然我对包含最大值的行感兴趣!
这是我的查询:
SELECT h_v_charges.*,
max(last_v.version) as lv
FROM hist_versions_charges h_v_charges
JOIN hist_versions_charges last_v
ON h_v_charges.version = lv
AND h_v_charges.proj_charge_id = last_v.proj_charge_id
GROUP BY last_v.proj_sous_projet_id,
last_v.proj_charge_id
HAVING last_v.proj_sous_projet_id = 2
ORDER BY h_v_charges.proj_charge_id ASC;
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息:
ERROR: column "lv" does not exist
LINE 1: ..._versions_charges last_v ON h_v_charges.version = lv AND h_v...
^
********** Error ********** …Run Code Online (Sandbox Code Playgroud) 我在表中有一些数据,如下所示:
product_id | categories
----------------+-------------
10 | 9,12
11 | 8
12 | 11,18,5
Run Code Online (Sandbox Code Playgroud)
我想要一个会产生这个输出的选择语句:
product_id | category_id
----------------+-------------
10 | 9
10 | 12
11 | 8
12 | 11
12 | 18
12 | 5
Run Code Online (Sandbox Code Playgroud)
我不知道如何表达这种情况才能用谷歌搜索它。
我希望从数据库中返回用户列表。数据库中有数百个用户。每个用户都有自己唯一的 user_id。我尝试返回的所有值都位于同一列 (meta_value) 中。
数据库结构如下:
id | user_id | meta_key | meta_value
Run Code Online (Sandbox Code Playgroud)
样本数据如下:
1 | 3434 | 名字| 布兰登 2 | 3434 | 姓氏 | 约翰逊 3 | 3434 | street_add | 123主 4 | 3434 | 城市 | 海洋海滩 5 | 3434 | 状态 | 德克萨斯州
我试图在一个 sql 语句中返回名字、姓氏、street_add、城市和州。
我希望输出看起来像:
Brandon, Johnson, 123 Main, Ocean Beach, Texas
Run Code Online (Sandbox Code Playgroud) 我可以使用以下内容选择具有一个条件的多行:
SELECT `Col`, `Col2` FROM `Table` WHERE `Col3` IN (?, ?, ?, ?, ?);
# This selects 5 rows
Run Code Online (Sandbox Code Playgroud)
如果有多个条件(所有整数等于运算),如何做到这一点?
查询需要检查三个条件,所有这三个条件构成了复合主键。
单个查询将选择 10 到 100 行(尽管大多数情况下只有 10 行)——它在性能方面必须很快。这就是为什么使用多个查询不是一个好主意。
该CREATE TABLE声明是:
CREATE TABLE `Table Name` (
`X` smallint(6) unsigned NOT NULL,
`Y` smallint(6) unsigned NOT NULL,
`Z` smallint(6) unsigned NOT NULL,
`Data` varchar(2048) NOT NULL DEFAULT '',
PRIMARY KEY (`X`,`Y`,`Z`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
对于多个查询,可以这样做:
SELECT `One`, `Two` FROM `Table` WHERE `X` = ? AND `Y` = ? AND …Run Code Online (Sandbox Code Playgroud) 我有一个包含这些字段的表结果:
每个 number_* 列可以包含一个从 01 到 90 的数字。
我有一个带有 90 个复选框的搜索表单。用户最多可以勾选 5 个复选框。
一旦用户选择 n 复选框,我需要构建一个查询来查找包含所有这些值的行,但数字可以位于五列中的任何一列。
例子:
用户勾选复选框 02、12 和 20。我需要检索所有三个数字的所有行,但我的数字可以在任何 number_* 列中。20 可以在 number_one 列中,02 可以在 number_three 列中,12 可以在 number_four 列中。如何构建此查询?
另外,使用一列而不是五列会更好吗?结果表:
列号包含 02-12-20-57-84,其中 - 是分隔符。
示例:用户勾选复选框 02、12 和 20。所以我的查询将是
SELECT *
FROM results
WHERE numbers LIKE "%02%"
AND numbers LIKE "%12%"
AND numbers LIKE "%20%";
Run Code Online (Sandbox Code Playgroud)
更新:我目前正在使用 MySQL 进行此设置:
我有一个 SQLite 数据库,其中有一个名为minecraft.
+----+----------------------+
| id | name |
+----+----------------------+
| 1 | Pocket Mine MP |
| 2 | Open Computers |
| 3 | hubot minecraft skin |
| 4 | Terasology |
| 5 | msm |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)
我需要找到所有在其“名称”字段中包含“e”和“o”的记录。这是我的选择查询:
select * from minecraft where name like '%e%o%'
Run Code Online (Sandbox Code Playgroud)
以下是上述查询的结果:
+----+----------------+
| id | name |
+----+----------------+
| 2 | Open Computers |
| 4 | Terasology |
+----+----------------+
Run Code Online (Sandbox Code Playgroud)
问题是 Like 谓词匹配整个值,而不是单词。不应该匹配 id = 2 的行,因为所有条件都没有出现在一个单词中('e' 出现在第一个单词中,'o' …
过去 24 小时都在为某事挣扎。需要一些天才来发光。我正在尝试为驱动程序显示每周工作循环/日志,它将显示:
最后2点是我真正挣扎的地方。
我有以下表格:
drivers ('driver_id', 'driver_name')
vehicles ('vehicle_id', 'vehicle_make', 'vehicle_model')
jobs ('job_id', 'collection_address', 'collection_datetime', 'delivery_address', 'deliver_datetime', 'driver_id', 'vehicle_id')
Run Code Online (Sandbox Code Playgroud)
我附上了下面的输出屏幕:
例如,如果您查看 23/09/2016,司机 Keith 正在工作,但 Nick 有空。但是,如果我执行子查询,它会显示两个驱动程序,这不是正确的结果。我的 SQL 语句如下,如果有人可以提供帮助,我将不胜感激。
SELECT listofdays.job_date, j.job_id, IF( j.driver_id > 0 AND j.job_id > 0, (SELECT driver_name FROM t_drivers WHERE driver_id = j.driver_id LIMIT 1), '') as job_driver, IF( j.vehicle_id > 0, (SELECT vehicle_reg FROM t_vehicles WHERE vehicle_id = j.vehicle_id LIMIT 1), 'no') as job_vehicle, j.collection_town, j.collection_postcode, j.delivery_town, j.delivery_postcode, j.job_status
FROM …Run Code Online (Sandbox Code Playgroud) 这是我需要用一些 T-SQL Magic 解决的难题,我尝试过但失败了。
这是其中之一,在我想到实际解决方案之前,我认为我可以在 3 分钟内使用一些 T-SQL 解决,但是当“橡胶遇到道路”时,我无法在脑海中想象正确的运算符来实现这个逻辑。
我想知道 Stack Exchange 社区中是否有人可以找到一个优雅的解决方案。我想通过使用临时表或游标的 3 或 4 个查询的组合,我可以找到解决方案,但它不会基于 SET...
我有一张看起来像这样的桌子(或多或少......)
CREATE TABLE Computers (
ID int IDENTITY(1,1),
ComputerName varchar(255),
OS varchar(255),
AppName varchar(255),
AppVersion varchar(10)
)
Run Code Online (Sandbox Code Playgroud)
因此,每一行都有一个计算机名称、一个操作系统值(可以是 Windows 7 或 Windows 10),然后是应用程序的描述(例如 AppName = "Notepad++", AppVersion = "7.5.6")
ComputerName | OS | AppName | AppVersion
Computer 1 | Windows 7 | App 1 | 1.0
Computer 1 | Windows 7 | App 2 | 1.0
Computer 1 | Windows 7 | …Run Code Online (Sandbox Code Playgroud)