【问题标题】:sql statement query last datasql语句查询最后一条数据
【发布时间】:2014-07-07 12:17:13
【问题描述】:

我开始学习如何编写 sql 语言,但我遇到了以下问题:现在我有一个名为“数据”的表中的数据

+--------+----------+ |编号 |日期 | +--------+----------+ | 1 | 2009-05-10 09:17:25 | | 2 | 2010-04-09 09:17:25 | | 3 | 2010-12-12 09:17:25 | | 4 | 2011-01-11 09:17:25 | | 5 | 2012-03-19 09:17:25 | | 7 | 2012-05-20 09:17:25 | | 8 | 2013-02-21 09:17:25 | | 9 | 2013-02-02 09:17:25 | +--------+----------+

我想写一条sql语句从sysdate获取去年的3,所以我想得到的结果是

+------+ |日期 | +------+ | 2011 | | 2012 | | 2013 | +------+

假设我们并不确切知道有多少不同的类型和列数,那么您能指导我如何处理这个问题吗?

提前致谢

【问题讨论】:

  • 你能证明你至少尝试过什么吗?
  • 你用的是什么版本的sql server?
  • sysdate 是甲骨文。您使用的是 Oracle 还是 SQL Server?等效的 SQL Server 是 GETDATE()

标签: sql sql-server date


【解决方案1】:

您可以使用以下查询。

WITH years([year])
AS
(
    SELECT DISTINCT YEAR([date]) AS [year]
    FROM my_table
        ORDER BY YEAR([date]) DESC
)
SELECT TOP 3 [year]
FROM years 
ORDER BY [year] ASC;

【讨论】:

    【解决方案2】:

    你可以使用top:

    SELECT   DISTINCT TOP 3 YEAR([date]) AS [date]
    FROM     my_table
    ORDER BY YEAR([date]) DESC
    

    【讨论】:

    • 但是你查询得到的结果是 2009、2010 和 2011 年……我想从 2011、2012 和 2013 年的数据中得到去年的 3……你能指导我吗..
    • @user3809259 哎呀,用asc 代替desc - 已修复。
    【解决方案3】:

    你可以试试这个查询:

    WITH years([year])
    AS
    (
    SELECT   DISTINCT TOP 3 YEAR([date]) AS [date]
    FROM     Table1
    ORDER BY YEAR([date]) DESC
    )
    SELECT TOP 3 [year]
    FROM years 
    ORDER BY [year] ASC;
    

    SQL FIDDLE DEMO

    【讨论】:

      【解决方案4】:

      尝试以下查询:

      SELECT DISTINCT TOP(3) YEAR(date) AS date
      FROM YourTable
      ORDER BY YEAR(date) DESC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-27
        • 2013-07-18
        • 2015-03-20
        • 2014-09-21
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多