我有一个表,该表有四列(创建,到期,激活,更新),数据类型为DateTime。我想要每个日期所有四列的计数数。
String insertSQL = "INSERT INTO `news`( `title`, `date`, `description`) VALUES(?,?,?)";
PreparedStatement ps = DBUtils.getPreparedStatement(insertSQL);
ps.setString(1, n.getTitle());
ps.setString(2, n.getDate());
ps.setString(3, n.getDescription());
int rs = ps.executeUpdate();
if (rs > 0) {
System.out.println("DB updated!");
}
上面是四个不同的查询,这些查询为我提供了日期及其计数。但是我想获取所有列的日期和计数 我想要的是日期count_dt,count_dte,count_dta,count_dtr。但是我正在获取date_dt,date_dte,date_dta,date_dtr,count_dt,count_dte,count_dta,count_dtr。 简而言之,我想结合以上四个查询。
答案 0 :(得分:1)
您可以使用Django的Coalesce
函数从所有日期列中选择第一个非空值,然后为每个月值注释各种计数:
from django.db.models.functions import TruncMonth, Coalesce
from django.db.models import Count
table1.objects.annotate(month=Coalesce(TruncMonth('created'), TruncMonth('expires'), TruncMonth('activated'), TruncMonth('renewed)))
.values('month')
.annotate(nc=Count('created'), ne=Count('expires'), na=Count('activated'), nr=Count('renewed')
输出是带有键month, nc, ne, na, nr
的键值对的QuerySet。