我需要显示我们按日,周,月和年销售的所有Products
的历史记录。此数据将发送到Google图表API,以显示结果的折线图。
所以,如果我有一个名为Products
的表,它看起来像: -
ProductID INT
DateCreated DATETIMEOFFSET
并且用户要求查看ProductID 1的历史记录。我怎样才能检索到这个? 例如输出。
Monday 1st Dec: 0
Tuesday 2nd Dec: 3
Wed 3rd Dec: 1
Week 49 2008: 21
Week 50 2008: 11
Week 51 2008: 45
Week 52 2008: 0
Dec 08: 102
Jan 09: 23
我不确定“白天”是否可以完成......或者其中任何一个。
欢呼:)花了一点时间后,我得到了第一个工作......但仍然需要其他两个人的帮助,并使其成为一个查询的一部分......
from p in Products
where p.ProductId == 69
group p.DateCreated by p.DateCreated.Date into grouping
orderby grouping.Key
select new { Date = grouping.Key, Count = grouping.Count() }
答案 0 :(得分:1)
var data = from p in ctx.Products
where p.ProductID == *productId*
group p by p.DateCreated.DayOfWeek into groupedProducts
select new { DayOfWeek = groupedProducts.Key, Count = groupedProcuts.Count() };
如果不进行测试,我认为可以为您做到这一点
每年这样做:
var data = from p in ctx.Products
where p.ProductID == *productId*
group p by n.CreateDate.Year into gn
select new {
Count = from a in gn
group a by a.CreateDate.DayOfYear into aa
select new { Count = aa.Count(), Key = new DateTime(gn.Key , 1, 1).AddDays(aa.Key) }
};
(抱歉变量名称:P)
答案 1 :(得分:0)
我不知道如何使用LINQ表达式,但您可以使用PIVOT运算符编写存储过程。请参阅Using PIVOT and UNPIVOT。
答案 2 :(得分:0)
使用DateTime.Date,DateTime.Month和DateTime.Year。但是,LINQ-to-SQL中存在一个错误,有时会将这些错误转换为无效的SQL。作为一种解决方法,您可以按照'1980-01-01'中的SqlMethods.DateDiffDay,SqlMethods.DateDiffMonth和SqlMethods.DateDiffYear进行分组。
周部分并不那么容易。一周的开始取决于Sql Server设置,因此它不可靠。或者,您可以使用SqlMethods.DateDiffDay从您的案例中开始一周的某个日期开始,并将日差除以7.如果您需要给定年份的周数,则应计算与最近一周开始日相比较少的日期差异或等于年初。