SQL 合并 WITH 子句和 SELECT 与联接
SQL merge WITH clause and SELECT with joins
我想合并 WITH 子句和 SELECT 子句,以便两者都在一个 table 查询中。
其中一个“downloadinfo”包含有关指定用户下载某些文件的时间的数据,另一个是文件详细信息的输出,与另外两个 tables(类别和再次下载信息但仅用于下载计数器目的)。
Select + 计数器
SELECT FileAlias, FileEXT, FileSize, FileExtension, UploadDate, category, COUNT(id_downloadInfo) as "counter"
FROM files
JOIN categories ON files.category_id = categories.id_categories
JOIN users ON files.users_id_users = users.id_users
LEFT JOIN downloadinfo ON files.id_files = downloadinfo.files_id_files
WHERE organisations_id_organisations = 1 AND UserOnly = 0
GROUP BY files_id_files;
它产生如下结果
然后我有另一个查询,我想将其与这个结果查询合并。
基本上,每次有人下载文件时,当另一个 SQL 查询 table 下载文件时,计数器就会递增 1。
它通过下载用户 ID、下载文件 ID 和下载日期时间。
我想过滤最新(或最新)的下载时间,所以我又查询了。
WITH added_row_number AS (
SELECT files_id_files, DownloadDate, ROW_NUMBER() OVER(PARTITION BY files_id_files
ORDER BY id_downloadInfo ASC) as newest
FROM downloadinfo
)
SELECT * FROM added_row_number
WHERE newest = 1;
并且它产生了我正在寻找的准确结果,即最新或最新的下载时间。
知道如何合并这两个查询以将其包含在查询中吗?如果“下载日期”是“计数器”旁边的另一列,那将是最好的。
下载信息 table 有:
- id_download 信息 - 唯一主键
- 下载日期 - 从 java 脚本传递的当前日期时间
- files_id_files - 作为文件外键的文件 ID table
- users_id_users - 作为用户外键的用户 ID table
文件 table 有:
- id_files - 唯一主键
- users_id_users - 用户的外键 table
- 一些其他文件信息
不知道你的预期答案是不是这个。
我的感觉是,您可以将 WITH 子句用作 table,如下所示
left join (WITH added_row_number AS (
SELECT files_id_files, DownloadDate, ROW_NUMBER() OVER(PARTITION BY files_id_files
ORDER BY id_downloadInfo ASC) as newest
FROM downloadinfo
) SELECT * FROM added_row_number
WHERE newest = 1) x on x.files_id_files = files.files_id_files
并访问您的计数 (*) 字段旁边的字段,例如 、X.DownloadDate
对可用的主键不太了解。
所以我用了“x.files_id_files = files.files_id_files”
但是为什么我们不能将其用作子查询,在 Count(*)
旁边使用 limit 命令
示例,
SELECT FileAlias, FileEXT, FileSize, FileExtension, UploadDate, category, COUNT(id_downloadInfo) as "counter",
(SELECT DownloadDate FROM downloadinfo di
where di.files_id_files = files.files_id_files
order by DownloadDate desc limit 1) as DownloadDate
FROM files
JOIN categories ON files.category_id = categories.id_categories
JOIN users ON files.users_id_users = users.id_users
LEFT JOIN downloadinfo ON files.id_files = downloadinfo.files_id_files
WHERE organisations_id_organisations = 1 AND UserOnly = 0
GROUP BY files_id_files;
但是如果你需要访问比日期更多的列,WITH命令就可以了。
我想合并 WITH 子句和 SELECT 子句,以便两者都在一个 table 查询中。
其中一个“downloadinfo”包含有关指定用户下载某些文件的时间的数据,另一个是文件详细信息的输出,与另外两个 tables(类别和再次下载信息但仅用于下载计数器目的)。
Select + 计数器
SELECT FileAlias, FileEXT, FileSize, FileExtension, UploadDate, category, COUNT(id_downloadInfo) as "counter"
FROM files
JOIN categories ON files.category_id = categories.id_categories
JOIN users ON files.users_id_users = users.id_users
LEFT JOIN downloadinfo ON files.id_files = downloadinfo.files_id_files
WHERE organisations_id_organisations = 1 AND UserOnly = 0
GROUP BY files_id_files;
它产生如下结果
然后我有另一个查询,我想将其与这个结果查询合并。 基本上,每次有人下载文件时,当另一个 SQL 查询 table 下载文件时,计数器就会递增 1。 它通过下载用户 ID、下载文件 ID 和下载日期时间。
我想过滤最新(或最新)的下载时间,所以我又查询了。
WITH added_row_number AS (
SELECT files_id_files, DownloadDate, ROW_NUMBER() OVER(PARTITION BY files_id_files
ORDER BY id_downloadInfo ASC) as newest
FROM downloadinfo
)
SELECT * FROM added_row_number
WHERE newest = 1;
并且它产生了我正在寻找的准确结果,即最新或最新的下载时间。
知道如何合并这两个查询以将其包含在查询中吗?如果“下载日期”是“计数器”旁边的另一列,那将是最好的。
下载信息 table 有:
- id_download 信息 - 唯一主键
- 下载日期 - 从 java 脚本传递的当前日期时间
- files_id_files - 作为文件外键的文件 ID table
- users_id_users - 作为用户外键的用户 ID table
文件 table 有:
- id_files - 唯一主键
- users_id_users - 用户的外键 table
- 一些其他文件信息
不知道你的预期答案是不是这个。 我的感觉是,您可以将 WITH 子句用作 table,如下所示
left join (WITH added_row_number AS (
SELECT files_id_files, DownloadDate, ROW_NUMBER() OVER(PARTITION BY files_id_files
ORDER BY id_downloadInfo ASC) as newest
FROM downloadinfo
) SELECT * FROM added_row_number
WHERE newest = 1) x on x.files_id_files = files.files_id_files
并访问您的计数 (*) 字段旁边的字段,例如 、X.DownloadDate
对可用的主键不太了解。 所以我用了“x.files_id_files = files.files_id_files”
但是为什么我们不能将其用作子查询,在 Count(*)
旁边使用 limit 命令示例,
SELECT FileAlias, FileEXT, FileSize, FileExtension, UploadDate, category, COUNT(id_downloadInfo) as "counter",
(SELECT DownloadDate FROM downloadinfo di
where di.files_id_files = files.files_id_files
order by DownloadDate desc limit 1) as DownloadDate
FROM files
JOIN categories ON files.category_id = categories.id_categories
JOIN users ON files.users_id_users = users.id_users
LEFT JOIN downloadinfo ON files.id_files = downloadinfo.files_id_files
WHERE organisations_id_organisations = 1 AND UserOnly = 0
GROUP BY files_id_files;
但是如果你需要访问比日期更多的列,WITH命令就可以了。