【问题标题】:Group data by date range and display query results in tabular form按日期范围分组数据并以表格形式显示查询结果
【发布时间】:2012-12-12 04:44:13
【问题描述】:

我正在尝试汇总单个到期日下的付款历史记录,并创建一个类似下面显示的 html 表格。

+--------------+---------------+----------------+
| Date Due     | Amount Paid   |   Date Paid    |
+--------------+---------------+----------------+
| Nov, 1 2012  |           $10 |   Oct, 21 2012 |
|              |           $15 |   Oct, 18 2012 |
| Oct, 14 2012 |           $20 |   Oct, 13 2012 |
|              |           $20 |   Sep,  3 2012 |
+--------------+---------------+----------------+

我面临的问题是这样的:

到期日期、支付金额和支付日期数据字段都在同一表格行中。到期日期不一定对应于实际付款的时间(可能付款晚了 3 周)。或者......也许在一个到期付款日期的时间范围内收到了两笔付款。

如何有效地解决此类问题并将其显示在表格中?我已经尝试了几种方法,但代码过于系统进程密集。

编辑:数据库表中的行当前看起来像这样:

+--------------+---------------+----------------+
| Date Due     | Amount Paid   |   Date Paid    |
+--------------+---------------+----------------+
| Nov, 29 2012 |           $10 |   Oct, 21 2012 |
| Nov, 15 2012 |           $15 |   Oct, 18 2012 |
| Nov,  1 2012 |           $20 |   Oct, 13 2012 |
| Oct, 14 2012 |           $20 |   Sep,  3 2012 |
+--------------+---------------+----------------+

但客户必须为每个到期日支付 50 美元。在这种情况下,客户拆分了他们的付款,但由于表格中数据的格式设置,它不适用于当前的到期日。

很遗憾,我无法更改数据库中的任何内容。

【问题讨论】:

  • 所以您有想要汇总到到期日的付款历史记录?你的桌子是用来交流什么的?此外,您应该能够在查询中执行此操作,只需遍历行并显示它们;没有花哨的逻辑。这就是 SQL 的用途,真的。
  • 该表用于传达每个到期日的付款。有时客户会将他们的付款分成两笔或多笔付款。问题是,由于数据库中的付款到期日应该对应于每次付款(并且也在同一表行上),因此有时会出现客户已全额付款,但实际上只进行了一次部分付款。
  • @JaredFarrish 是的,我正在尝试在一个到期日汇总付款历史记录!谢谢你的措辞更好。 :)
  • 您想要完成的是ledger accounting,您可以将其视为通过(滚动)债务和付款总额的总和来汇总义务和针对这些义务的交易。但是,您拥有的东西至少看起来并不是为交易而设计的; “到期日”实际上仅通过账户持有人的关系与账户持有人和付款金额有关。因此,到期日期应该在另一个表中,并与付款总额进行比较。付款日期实际上只是付款元数据。
  • 简而言之,Date Due 仅显示了一项义务,而没有其他意义。因此,您可以显示迄今为止的总付款(并忽略到期日期),或按到期日期显示付款(可能是“拖欠”或赤字表??)。您可以在 Date Due 旁边的查询中放置一列,其中包含 '$50',然后将其用作单独的列。唯一的问题是,如果您有带有到期日期条目的连续付款,这意味着您可以在到期日期执行聚合GROUP ON 以显示该义务的付款总额。这可能很有用。

标签: php html mysql


【解决方案1】:

查询将是

 select * from table_name order by Date_Due ASC,Date_Paid ASC , Amount_Paid ASC

此查询首先按Date_Due 升序排序,然后按Date_PaidAmount_Paid 排序。

【讨论】:

  • 我认为这可能是正确的查询,之后应该在应用程序的表示层中完成任何事情。
  • 根据OP的表格,应该是DESC - ASC - DESC。
  • 这对这张桌子不起作用 - 如果他们提前付款,它会完全切断一些付款,因为付款日期会超过到期日。
【解决方案2】:

假设您的查询是在一个平面表上,听起来您只是希望每个到期日期只显示一次(而不是每一行)。

如果那是正确的,我认为你应该在构建表的 php 代码中解决问题,而不是尝试在 mysql 结果中实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2021-06-21
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多