我的目标是根据以下查询获取 msgAddDate :
选择max(msgAddDate)
来自样本表
其中reportid = 1且objectType =' loan'和msgProcessed = 1;
设计1:
这里的reportid,objectType和msgProcessed可能不是唯一的。为了添加唯一性,我添加了msgAddDate和msgProcessedDate(一个额外的唯一值)。
我使用此设计是因为我没有执行范围查询。
创建表样本表(reportid INT,
objectType TEXT,
msgAddDate TIMESTAMP,
msgProcessed INT,
msgProcessedDate TIMESTAMP,
PRIMARY KEY((reportid,msgProcessed,objectType,msgAddDate,msgProcessedDate));
设计2:
创建表样本表(
reportid INT,
objectType TEXT,
msgAddDate TIMESTAMP,
msgProcessed INT,
msgProcessedDate TIMESTAMP,
PRIMARY KEY((reportid,msgProcessed,objectType),msgAddDate,msgProcessedDate)) );
请根据表现建议使用哪一个以及两者之间的利弊。
答案 0 :(得分:1)
设计2 是您想要的。
在设计1中,整个主键是分区键。这意味着您需要提供所有属性(可以是:reportid,msgProcessed,objectType,msgAddDate,msgProcessedDate),以便能够使用SELECT语句查询您的数据(这不会有用,因为您不会检索任何其他属性而不是你已经在WHERE statemenent中提供的那个)
在设计2中,您的分区键是reportid,msgProcessed,objectType,它们是您要查询的三个属性。大。 msgAddDate是第一个聚类列,它将自动为您排序。因此,您甚至不需要运行max
,因为它已经排序。您需要做的就是使用LIMIT 1:
SELECT msgAddDate FROM sampletable WHERE reportid = 1 and objectType = 'loan' and msgProcessed = 1 LIMIT 1;
当然,请确保在msgAddDate上定义DESC排序顺序(我认为默认情况下它是升序...)
希望它有所帮助!