【问题标题】:How do I get unique values of one column based on another column using the insert database query in Anylogic?如何使用 Anylogic 中的插入数据库查询基于另一列获取一列的唯一值?
【发布时间】:2022-01-19 07:43:44
【问题描述】:

如何使用查询基于另一列获取一列的唯一值?

我尝试过使用

(double)selectFrom(tasks).where(tasks.tasks_type.eq()).uniqueResult(tasks.task_cycle_time_hr);

我想自动执行此操作并确保正在读取 task_type 的所有值并返回每个 tasks_type 的唯一值!

对于列 task_type 中的所有值,我需要列 task_cycle_time_hr 中的唯一值。

【问题讨论】:

  • 最好分享一个有问题的数据屏幕,并澄清你到底需要什么,我不太清楚。

标签: anylogic unique-values


【解决方案1】:

我真的不明白您为什么要尝试在一个查询中执行此操作。

如果您想获取每个任务类型(tasks_type 列)的周期时间(task_cycle_time_hr 列),只需在循环中查询每个可能的 tasks_type 值。如果您不知道这些先验,请查询任务类型值查询返回的每个值,这看起来像

for (String taskType : selectFrom(tasks).list(tasks.tasks_type)) {  
    double cycleTime = (double) selectFrom(tasks)
                      .where(db_table.tasks_type.eq(taskType))
                      .firstResult(tasks.task_cycle_time_hr);
    
    traceln("Task type " + taskType + ", cycle time " + cycleTime);
}

但这只是查询所有行并从每个行读取任务类型和周期时间值,因此您通常不会这样做:您只会有一个查询循环遍历所有完整行。 ..

List<Tuple> rows = selectFrom(tasks).list();

for (Tuple row : rows) {
    traceln("Task type " +
        row.get(tasks.tasks_type) + ", cycle time " + 
        row.get(tasks.task_cycle_time_hr));
}

NB:我假设您没有任何包含重复任务类型的行,因为这样整个练习就没有意义,除非您只想要 first 行每个任务类型的值,或者想要每个给定任务类型的循环时间值的某种聚合(例如,总和)。您正在尝试使用uniqueResult,这可能意味着如果恰好有一行(对于给定的任务类型)并且“否则没有结果”,则您想要获取一个值,但uniqueResult 如果存在则抛出异常(错误)不完全是一排(所以你不能像那样直接使用它)。在那种情况下,一种方法(还有其他方法,有些可能稍微好一点)是先进行计数以进行检查;例如像

for (String taskType : selectFrom(tasks).list(tasks.tasks_type)) {

    int rowCount = (int) selectFrom(tasks)
              .where(db_table.task.eq(taskType))
              .count();

    if (rowCount == 1) {
       double cycleTime = (double) selectFrom(tasks)
                      .where(db_table.tasks_type.eq(taskType))
                      .firstResult(tasks.task_cycle_time_hr);
    
       traceln("Task type " + taskType + ", unique cycle time " + cycleTime);
    }
}

【讨论】:

    【解决方案2】:

    将您的 Excel 工作表导入 AnyLogi 内部数据库,然后使用数据库向导一步一步编写代码以检索您想要的数据

    (double) selectFrom(data)
        .where(data.tasks.eq("T1"))
        .firstResult(data.task_cycle_time_hr)
    

    【讨论】:

    • 这没有捕捉到问题中关于获取任务类型的每个值的周期时间值的部分。
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多