Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 月报-SQL_C#_Sql_Tsql - Fatal编程技术网

C# 月报-SQL

C# 月报-SQL,c#,sql,tsql,C#,Sql,Tsql,我有下表,如何在SQL中选择每个类别ID中每个月的最后日期(从列表中) 我想以一句话结束: 类别ID |当前|日期 1 | 5 | 2016-09-30 1 | 3 | 2016-10-30 1 | 7 | 2016-11-30 1 | 2 | 2016-12-30 随着历史的积累 图片: 试试这个: WITH Temp As ( select CategoryId, [Current], RecordAd

我有下表,如何在SQL中选择每个类别ID中每个月的最后日期(从列表中)

我想以一句话结束:

类别ID |当前|日期

1      |    5    | 2016-09-30
1      |    3    | 2016-10-30
1      |    7    | 2016-11-30
1      |    2    | 2016-12-30
随着历史的积累

图片:

试试这个:

WITH Temp As
(
select CategoryId, [Current], RecordAdded,
Dense_Rank() over( partition by CategoryId order by RecordAdded desc) as CatergoryWiseRank
from tblCategory
)
select CategoryId, [Current], RecordAdded from Temp where CatergoryWiseRank=1

考虑到您使用的是
MySQL
,因为您没有提到

假设这是名为:
'Dummy'

cat_id  current  date     
------  -------  --------
     1        5  2016-09-30
     1        3  2016-10-30
     1        7  2016-11-30
     1        2  2016-12-30
     2        4  2016-10-31
     2        6  2016-10-04
执行此查询:

select 
  o.cat_id,
  (SELECT DISTINCT 
    a.date 
  from
    Dummy a 
  where a.cat_id = o.cat_id 
  ORDER BY date DESC 
  LIMIT 1) as 'date' 
from
  Dummy o 
group by o.cat_id ;
为您提供每个类别的最新日期:

cat_id  date        
------  ------------
     1  2016-12-30  
     2  2016-10-31  
编辑

这是专门为你的桌子设计的。只需将“yourTable”替换为表的实际名称即可

select 
  o.CategoryID,
  o.StockCurrent
  (SELECT DISTINCT 
    a.RecordAdded 
  from
    yourTable a 
  where a.CategoryID = o.CategoryID 
  ORDER BY RecordAdded DESC 
  LIMIT 1) as 'RecordAdded' 
from
  yourTable o 
group by o.CategoryID ;
编辑2

此查询返回特定类别内每个月的最新日期。希望这是你想要的

SELECT 
  o.CategoryID,
  o.StockCurrent,
  o.RecordAdded 
FROM
  `yourTable` o 
WHERE o.RecordAdded IN 
  (SELECT 
    MAX(i.RecordAdded) 
  FROM
    `yourTable` i 
  GROUP BY MONTH(i.RecordAdded)) 
GROUP BY o.CategoryID,
  o.RecordAdded ;
假设该表包含以下示例数据:

CategoryID  StockCurrent  RecordAdded  
----------  ------------  -------------
         1             5  2016-09-01   
         1             3  2016-09-02   
         1             7  2016-10-01   
         1             2  2016-10-02   
         2             4  2016-09-01   
         2             6  2016-09-02   
         2            66  2016-10-01   
         2            77  2016-10-02   
运行此查询将返回以下结果集:

CategoryID  StockCurrent  RecordAdded  
----------  ------------  -------------
         1             3  2016-09-02   
         1             2  2016-10-02   
         2             6  2016-09-02   
         2            77  2016-10-02   

有几种方法可以做到这一点,其中之一就是使用窗口函数rownumber。在CTE(WITH)中,您可以在date内获得记录的本地顺序(使用covert来消除此处的时间)+CategoryID分区by datetime DESC(->first是latest)。您需要这样做,因为您不能在WHERE子句中使用窗口函数。然后,在主查询中,实际使用这个CTE作为源表,并且只获取每个分区的最新记录

WITH LocallyOrdered AS (
  SELECT CategoryID, 
  StockCurrent,
  ROW_NUMBER() OVER (
    PARTITION BY CategoryID, CONVERT(date, RecordAdded) 
    ORDER BY RecordAdded DESC) 
  AS RowNumberOneIsLatest
  FROM OriginalTable)
SELECT CategoryID, StockCurrent FROM LocallyOrdered WHERE RowNumberOneIsLatest = 1
结果

我不认为这些日期是月份的最后日期。您使用的是哪种数据库管理系统?(许多产品在日期/时间方面远远不符合ANSI SQL。)@GordonLinoff日期是每周五记录的,因此不一定是日历上的一个月的最后一天。例如,我制作日期以显示我想要的最终结果。@ExpressDude:DBMS代表数据库管理系统。简而言之,您使用什么数据库?通常,你会说像MySQL、Microsoft SQL Server(T-SQL是语言)、PostgreSQL,甚至MongoDB……UI看起来像SQL Management Studio,所以我在T-SQL上的钱很抱歉,它返回的结果与选择所有内容相同。你想为每个类别ID(按类别分组)返回一行吗?在哪个DBMS之间?如果你只需要类别id 1,也可以添加where子句,我可以这样做。每月工作4周,每个类别每月有4条记录。我想要一张每个类别每个月的最后一张唱片的列表。在12个月的时间里,每个类别ID将有12条记录。我需要每个类别每个月的最后一个“记录添加”日期。@ExpressDude现在检查编辑2,如果有帮助,请告诉我
SELECT  
CASE MONTH(date_field) 
WHEN 1 THEN 'Enero'
WHEN 2 THEN 'Febrero'
WHEN 3 THEN 'Marzo'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Mayo'
WHEN 6 THEN 'Junio'
WHEN 7 THEN 'Julio'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Septiembre'
WHEN 10 THEN 'Octubre'
WHEN 11 THEN 'Noviembre'
WHEN 12 THEN 'Diciembre'
END as Mes, COUNT(date_field) as cantidad FROM nacimientos 
WHERE YEAR(date_field)='1991'
GROUP BY MONTH(date_field)asc