比较同一表中的数据 - SQL

时间:2016-11-04 19:57:24

标签: sql sql-server

我正在使用课程目录表,其中我提供了目录代码和课程代码。我需要做的是确定何时不再提供课程并将其标记为存档课程。

CREATE TABLE [dbo].[COURSECATALOG](
    [catalog_code] [char](6) NOT NULL,
    [course_code] [char](7) NOT NULL,
    [title] [char](40) NOT NULL,
    [credits] [decimal](7, 4) NULL,

) 

insert into coursecatalog
values 
('200810', 'BIOL101', 'Biology', '3'),
('200810', 'CHEM201', 'Advanced Chemistry', '3'),
('200810', 'ACCT101', 'Beginning Accounting', '3'),
('201012', 'ACCT101', 'Beginning Accounting', '3'),
('201214', 'ACCT101', 'Beginning Accounting', '3'),
('201214', 'ENGL101', 'English Composition', '3'),
('201416', 'PSYC101', 'Psychology', '3'),
('201618', 'PSYC101', 'Psychology', '3'),
('201618', 'BIOL101', 'Biology', '3'),
('201618', 'CHEM201', 'Advanced Chemistry', '3'),
('201618', 'ENGL101', 'English Composition', '3'),
('201618', 'PSYC101', 'Psychology', '3')

在这种情况下,我需要返回ACCT101 - 开始会计,因为这不再提供,应该被视为存档课程。

到目前为止我的代码:

SELECT
catalog_code, course_code
FROM COURSECATALOG t1
WHERE NOT EXISTS (SELECT 1 
                    FROM COURSECATALOG t2
                   WHERE t2.catalog_code <> t1.catalog_code
                     AND t2.course_code = t1.course_code)
order by 
course_code, catalog_code

但这只返回一次只提供过一次的课程(在一个目录中)。我需要弄清楚如何才能获得可能在多个目录中提供但不再提供的课程。

我们非常感谢您提供的任何帮助!

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为catalog_code是YYYYMM格式的日期

SELECT course_code FROM (
SELECT CONVERT(char, catalog_code,112) AS catalog_code, course_code FROM COURSECATALOG
) AS Q
GROUP BY course_code
HAVING MAX(catalog_code) < '20160101'

实施例: http://sqlfiddle.com/#!6/32adfb/14/1

答案 1 :(得分:0)

你想要这样的东西:

SELECT course_code
FROM COURSECATALOG t1
GROUP BY course_code
HAVING MAX(catalog_code) <> '201618';

这假设&#34;目前正在提供&#34;表示它位于201618目录中。

您可以计算最新目录:

SELECT course_code
FROM COURSECATALOG t1
GROUP BY course_code
HAVING MAX(catalog_code) <> (SELECT MAX(catalog_code FROM COURSECATALOG);