SQL order by - 如何根据雇用日期列出资历

时间:2017-08-10 17:06:42

标签: sql

Screenshot from the test 我正在进行练习测试,无法弄清楚为什么我的答案是错误的。

任务是首先通过资历向最高级员工订购员工。 在我看来,当雇佣人员较低时,资历更高。雇用的人越久,他们就越有资历。因此,我认为正确的答案应该是#3 - 按雇用顺序排列(按升序排列)。此外,在#2中,评论是它是正确的但是对于双引号。但它会按资历按升序排序(先减少资历),这是不正确的。

我错过了什么? 谢谢你们!

3 个答案:

答案 0 :(得分:2)

我在SQL server中创建了一个表,里面有一些虚拟日期,并输入了以下查询:

select *, Date1 seniority from Table_1 order by date1 desc

我得到了这个结果:

1 LastName Smith 2012-05-05 00:00:00.000 2012-05-05 00:00:00.000 1 MiddleName S 2012-04-04 00:00:00.000 2012-04-04 00:00:00.000 1 FirstName Joe 2012-03-03 00:00:00.000 2012-03-03 00:00:00.000 1 Date 12/12/2009 2011-06-06 00:00:00.000 2011-06-06 00:00:00.000 2 MiddleName Smith 2011-05-05 00:00:00.000 2011-05-05 00:00:00.000 2 FirstName Sam 2011-04-04 00:00:00.000 2011-04-04 00:00:00.000

据我所知,看起来测试排序顺序和引号需求都是错误的。我唯一的猜测是你的测试是指其他一些符合ANSI标准的SQL版本。不过,我不打算购买ANSI规范的副本。

答案 1 :(得分:2)

在order by子句中使用DESC对日期进行排序按照您的描述进行操作;日期将是从最近到最近的订单。

参见this Oracle article演示ORDER BY hire_date DESC的示例3。

在这种情况下,您应该ORDER BY雇用ASC(默认设置)。

说明陈述的顺序错误,这也表明你可能已经在问题中找出了勘误。

答案 2 :(得分:0)

你很严谨,当雇佣人员较低时,资历较低。但是在他们给你的答案中,他们正在减去今天的日期减去雇佣人数,所以你得到的结果是每个雇员被雇用的年数(因为你除以365年)。 所以数字越多,他在公司工作的年数就越多。这就是你需要在desc模式下订购的原因