T-SQL 最小值和最大值

问题描述 投票:0回答:1

我是个超级新手,正在尝试了解子查询的工作原理。

我试图从查询第一部分的结果中获取最小值和最大值:

SELECT DISTINCT
    a.[Recording Date], 
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        TRIM([Document Number]), 
        '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') AS pattern
FROM 
    [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History] a
WHERE 
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        TRIM([Document Number]),
        '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') = 'nnnnnn-n'

预期结果应该是

1993-01-06
2023-12-31
:

但是我正在恢复所有内容,所以看起来我的子查询没有执行任何操作。

我的整个查询:

SELECT DISTINCT
    a.[Recording Date], 
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        TRIM([Document Number]),
        '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') as pattern
FROM 
    [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History] a
WHERE   
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        TRIM([Document Number]),
        '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') = 'nnnnnn-n'
      (SELECT MIN([Recording Date]) AS MIN_DATE
       FROM [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History]
       UNION
       SELECT MAX([Recording Date]) AS MAX_DATE
       FROM [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History])
sql-server t-sql max min
1个回答
1
投票

你所说的是一个非常基本的分组查询。我省略了所有替换,因为这与您编写查询的方式无关 - 使用一个非常简单的替换函数。这实际上并不是关于子查询,而是关于分组。

declare @KY_Shelby_Recorder_History table (
    Id int identity(1,1),
    [Recording Date] date,
    [Document Number] nvarchar(100),
    primary key (Id))

insert into @KY_Shelby_Recorder_History (
    [Recording Date], [Document Number])
    values
    ('1993-01-08', '111-1'),
    ('1993-01-09', '111-1'),
    ('2023-12-29', '111-1'),
    ('2023-12-30', '111-1'),
    ('1993-01-06', '111111-1'),
    ('1993-01-07', '111111-1'),
    ('2023-12-30', '111111-1'),
    ('2023-12-31', '111111-1')

select
    min(a.[Recording Date]) as MinOfRecordingDate,
    max(a.[Recording Date]) as MaxOfRecordingDate, 
    replace(a.[Document Number], '1', 'n') as [pattern]
from
    @KY_Shelby_Recorder_History a
group by
    replace(a.[Document Number], '1', 'n')

结果是:

最短记录日期 最大记录日期 文件编号
1993-01-08 2023-12-30 nnn-n
1993-01-06 2023-12-31 nnnnnn-n

这是任何 sql 介绍中都涵盖的非常基础的 sql,因此您可能需要自己集中精力学习 sql 基础知识,以便了解基础知识。

© www.soinside.com 2019 - 2024. All rights reserved.