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 有:

  1. id_download 信息 - 唯一主键
  2. 下载日期 - 从 java 脚本传递的当前日期时间
  3. files_id_files - 作为文件外键的文件 ID table
  4. users_id_users - 作为用户外键的用户 ID table

文件 table 有:

  1. id_files - 唯一主键
  2. users_id_users - 用户的外键 table
  3. 一些其他文件信息

不知道你的预期答案是不是这个。 我的感觉是,您可以将 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命令就可以了。