我在数据库中有图片,我现在需要提取。图像列的类型为varbinary(max)
。
我尝试使用JOIN或子查询的几个例子无济于事。如果不是图像,开发的查询将起作用。使用DISTINCT
和MAX(date)
仍然无法消除旧图像。许多ID都有多张图片。使用Max(Date)
将提取最近的日期,但添加图片会消除所有过滤。
查询如下所示:
SELECT DISTINCT ID, Image, DateModified, GETDate()
FROM images
WHERE
TYPE = 'B'
ID Image DateMod Type
1 0x789 01-02-2014 B
1 0x791 11-12-2015 B <-- this is a tgt record
2 0x675 12-01-2015 A
5 0x324 06-26-2015 B <-- this is a tgt record
如果我使用MAX(DateModified)
,会强制GROUP BY
并且仍然无法消除旧图像。我需要每个ID的最新Type'B'图像。我正在研究SQL Server 2012.
我需要输出的是什么
image, ID, DateModified, TodaysDate (GetDate)
答案 0 :(得分:4)
很确定你想要这样的东西。
with SortedResults as
(
select ID
, Image
, DateMod
, Type
, ROW_NUMBER() over (partition by ID order by DateMod desc) as RowNum
from images
where Type = 'B'
)
select ID
, Image
, DateMod
, GetDate()
from SortedResults
where RowNum = 1
答案 1 :(得分:2)
尝试以下查询
SELECT
I.[Image],
I.DateMod,
GetDate()
FROM
(
SELECT
ID,
MAX(DateModified) AS DateModified
FROM
images
WHERE
[TYPE] = 'B'
GROUP BY
ID
) A INNER JOIN
images I ON A.ID = I.ID AND A.DateModified = I.DateModified
答案 2 :(得分:0)
问题可能是双重的:
DISTINCT
是罪魁祸首。我建议您学习并记住Logical order of SQL Clauses,以便逻辑理解SQL Server如何阅读您的规定查询。为简单起见,请从经典列表开始,该列表在很多地方使用。
Classic Complete
FROM | FROM
WHERE | ON
GROUP BY | JOIN
HAVING | WHERE
SELECT | GROUP BY
ORDER BY | WITH CUBE, WITH ROLLUP
| HAVING
| SELECT
| DISTINCT
| ORDER BY
| TOP
我们已经可以看到您的查询返回结果错误的原因,因为SQL Server 不将列集粉碎在一起,而是在列中粉碎不同的行。< / p>
您的示例列表:
ID Image DateMod Type
1 0x789 01-02-2014 B
1 0x791 11-12-2015 B <-- this is a tgt record
2 0x675 12-01-2015 A
5 0x324 06-26-2015 B <-- this is a tgt record
具有唯一的行,因此会返回所有记录。显然,问题是DISTINCT
。
一种解决方案是保持谓词相同,并使用GROUP BY
子句粉碎列集,并使用MAX()
聚合函数返回最大值。
;WITH C AS
( SELECT ID
, MAX(DateMod) AS DateModified
, CONVERT(VARCHAR(10), GETDATE(), 110) AS [Current_Time]
FROM #Images
WHERE Type = 'B'
GROUP BY ID, Type)
SELECT C.ID, B.Image, C.DateModified, C.[Current_Time]
FROM C
LEFT OUTER JOIN (SELECT ID, DateMod, Image FROM #Images) B ON C.ID = B.ID
AND C.DateModified = B.DateMod
- 结果
ID Image DateModified Current_Time
1 0x3078373931 11-12-2015 07-16-2016
5 0x3078333234 06-26-2015 07-16-2016