Mysql SQL查询以提取最近的部分以及比该日期早30天的任何内容。
我对SQL非常陌生,需要编写一个查询来为特定部分选择数据。但是,它应该只选择日期最新的零件以及日期前30天的任何零件。请考虑下表:Mysql SQL查询以提取最近的部分以及比该日期早30天的任何内容。,mysql,sql,sql-server,Mysql,Sql,Sql Server,我对SQL非常陌生,需要编写一个查询来为特定部分选择数据。但是,它应该只选择日期最新的零件以及日期前30天的任何零件。请考虑下表: PartID | Part_NAME | DATE ----------------------------- 1 AAA 6/16/2015 2 BBB 6/15/2015 3 AAA 6/11/2015 4 AAA 1/1/2008 我需要一个查询,可以提供
PartID | Part_NAME | DATE
-----------------------------
1 AAA 6/16/2015
2 BBB 6/15/2015
3 AAA 6/11/2015
4 AAA 1/1/2008
我需要一个查询,可以提供:
PartID | Part_NAME | DATE
-----------------------------
1 AAA 6/16/2015
3 AAA 6/11/2015
我试过:
select * from ( select * from sales_table where Part_NAME = 'AAA') where DATE BETWEEN (max(DATE) and (max(DATE)-30))
我读过一些文章,说我不能同时使用WHERE和max等函数,并建议我使用groupby或have,但它对我也不起作用。谢谢。您可以通过使用datediff和getdate以及子查询来完成
SELECT * FROM (
SELECT *,DATEDIFF(DD,[DATE],GETDATE()) AS DAYSBETWEEN FROM sales_table
) AS X
WHERE DAYSBETWEEN <= 30
如果您需要过去30天的数据,则应为:
select st.*
from sales_table st join
(select top (1) st2.*
from sales_table st2
order by st2.date desc
) st2
on st2.part_name = st.part_name and
st.date >= dateadd(day, -30, cast(getdate() as date));
如果您需要当天最后30天的数据,可以执行以下操作:
SELECT *
FROM sales_table
WHERE
[DATE] >= DATEADD(DAY, -30,GETDATE())
AND [DATE] <= GETDATE()
AND Part_NAME = 'AAA'
SELECT *
FROM (
SELECT *,
MAX([DATE]) OVER(PARTITION BY Part_NAME ORDER BY PartID) AS RecentDate
FROM sales_table
) D
WHERE
[DATE] >= DATEADD(DAY, -30, RecentDate)
AND [DATE] <= RecentDate
AND Part_NAME = 'AAA'